로드 중...
검색 중...
일치하는 항목 없음
DomainChecking.cs
1사용 중시스템;
2사용 중System.Collections.Generic;
3사용 중System.Linq;
4사용 중시스템.텍스트;
5사용 중메가 슬롯;
6
7네임스페이스도메인 확인 중
8{
28{
29 정적 int메인(문자열[] 인수)
30{
32 if(Environment.GetCommandLineArgs().Length > 1)
33ws =신규 메가 슬롯작업공간(systemDirectory: Environment.GetCommandLineArgs()[1]);
34 그밖에
35ws =신규 메가 슬롯작업공간();
36
37 // C# 데이터 구조를 사용하여 일부 데이터 정의
38목록<string> 식물 =신규목록<문자열>()"시애틀", "샌디에고"};
39목록<string> 시장 =신규목록<문자열>()"뉴욕", "시카고", "토피카"};
40사전<문자열, 더블> 용량 =신규사전<string, double>()"시애틀", 350.0 }, { "샌디에고", 600.0 } };
41사전<문자열, 더블> 수요 =신규사전<string, double>()"뉴욕", 325.0 }, { "시카고", 300.0 }, { "토피카", 275.0 } };
42사전<튜플<문자열, 문자열>,더블> 거리 =신규사전<튜플<문자열, 문자열>,더블>()
43{
44{신규튜플<문자열,문자열> ("시애틀", "뉴욕"), 2.5 },
45{신규튜플<문자열,문자열> ("시애틀", "시카고"), 1.7 },
46{신규튜플<문자열,문자열> ("시애틀", "토피카"), 1.8 },
47{신규튜플<문자열,문자열> ("샌디에고", "뉴욕"), 2.5 },
48{신규튜플<문자열,문자열> ("샌디에고", "시카고"), 1.8 },
49{신규튜플<문자열,문자열> ("샌디에고", "토피카"), 1.4 }
50};
51
52 // C# 데이터 구조의 데이터로 GAMSDatabase 준비
54
55 // GAMSDatabase에 두 세트 추가
56 GAMSSeti = DB.AddSet("나", "");
57 foreach (문자열pin식물)
58i.AddRecord(p);
59 GAMSSetj = db.AddSet("j", "");
60 foreach (문자열m시장)
61j.AddRecord(m);
62
63 // 도메인 정보가 포함된 매개변수 추가
64 메가 슬롯매개변수a = db.AddParameter("a", "공장의 생산 능력", i);
65 foreach (문자열p식물)
66a.AddRecord(p).= 용량[p];
67
68 // 도메인 위반이 발견되면 문제가 발생한 것입니다.
69 if(!a.CheckDomains())
70{
71Console.WriteLine("*** 예상치 못한 도메인 위반");
72 반환1;
73}
74
75 // 완화된 도메인 정보로 매개변수 추가
76 메가 슬롯매개변수b = db.AddParameter("b", "경우에 따라 시장 j의 수요", "j");
77 foreach (문자열min시장)
78b.AddRecord(m).= 수요[m];
79
80 // 도메인 위반이 발견되면 뭔가 잘못되었습니다.
81 if(!b.CheckDomains())
82{
83Console.WriteLine("*** b에서 예기치 않은 도메인 위반");
84 반환1;
85}
86
87 // 도메인 정보가 포함된 2차원 매개변수 추가
88 메가 슬롯매개변수d = db.AddParameter("d", "수천 마일 단위의 거리", i, j);
89 foreach(튜플<문자열, 문자열> t거리.키)
90d.AddRecord(t.Item1, t.Item2).= 거리[t];
91
92 // 도메인 위반이 발견되면 뭔가 잘못되었습니다.
93 if(!d.CheckDomains())
94{
95Console.WriteLine("*** d에서 예기치 않은 도메인 위반");
96 반환1;
97}
98
99 // 데이터베이스에서 도메인 위반이 발견되면 문제가 발생한 것입니다.
100 if(!db.CheckDomains())
101{
102Console.WriteLine("*** DB에서 예기치 않은 도메인 위반");
103 반환1;
104}
105
106 // "잘못된" 항목 생성
107d.AddRecord("시애틀", "아아").값 = 1;
108d.AddRecord("bb", "시애틀").값 = 1;
109a.AddRecord("아아").값 = 1;
110a.AddRecord("bb").값 = 1;
111b.AddRecord("아아").값 = 1;
112b.AddRecord("bb").값 = 1;
113
114 // 이제 메가 슬롯 데이터베이스와 기호 a 및 d에 도메인 위반이 있어야 합니다.
115 if(db.CheckDomains())
116{
117Console.WriteLine("*** DB에 대한 도메인 위반이 인식되지 않음");
118 반환1;
119}
120 if(a.CheckDomains())
121{
122Console.WriteLine("*** 인식되지 않는 도메인 위반");
123 반환1;
124}
125 if(d.CheckDomains())
126{
127Console.WriteLine("*** d에 대한 도메인 위반이 인식되지 않음");
128 반환1;
129}
130
131 // 이와 대조적으로 b는 실제 도메인 정보로만 정의되었으므로 도메인 위반이 표시되어서는 안 됩니다.
132 if(!b.CheckDomains())
133{
134Console.WriteLine("*** b에서 예기치 않은 도메인 위반");
135 반환1;
136}
137
138 // a의 경우 2개의 도메인 위반("aa" 및 "bb")이 표시됩니다.
139 intdvCnt = 0;
140Console.WriteLine("다음 도메인 위반:");
141 foreach (GAMSSymbolDomainViolationSDVa.GetSymbolDVs())
142{
143콘솔.쓰기(" > ");
144 foreach (부울viinSDV.비올인드)
145콘솔.쓰기(vi +" ");
146콘솔.쓰기("<> ");
147 foreach (문자열kinSDV.비올렉.)
148콘솔.쓰기(k +" ");
149Console.WriteLine("<<");
150dvCnt++;
151}
152 if(dvCnt != 2)
153{
154Console.WriteLine("*** a에 대한 도메인 위반 횟수는 2여야 하지만 "+ dvCnt);
155 반환1;
156}
157
158 // d의 경우 3개의 도메인 위반이 표시됩니다("Seattle", *"aa"*; *"bb"*, *"Seattle"*)
159dvCnt = 0;
160Console.WriteLine("d의 도메인 위반:");
161 foreach (GAMSSymbolDomainViolationSDVd.GetSymbolDVs())
162{
163콘솔.쓰기(" > ");
164 foreach (부울viinSDV.바이올인드)
165{
166콘솔.쓰기(vi +" ");
167 if(vi)
168dvCnt++;
169}
170콘솔.쓰기("<> ");
171 foreach (문자열kinSDV.비올렉.열쇠)
172콘솔.쓰기(k +" ");
173Console.WriteLine("<<");
174}
175 if(dvCnt != 3)
176{
177Console.WriteLine("*** a에 대한 도메인 위반 횟수는 3이어야 하지만 확인했습니다. "+ dvCnt);
178 반환1;
179}
180
181 // db의 경우 5개의 도메인 위반이 표시되어야 합니다(모두 a와 d의 위반)
182dvCnt = 0;
183Console.WriteLine("DB의 도메인 위반:");
184 foreach (GAMSDatabaseDomainViolationDDVindb.GetDatabaseDVs())
185{
186Console.WriteLine(" > "+ DDV.비올심.이름 + ": ");
187 foreach (GAMSSymbolDomainViolationSDVDDV.ViolRecs)
188{
189콘솔.쓰기(" ");
190 foreach (부울viinSDV.비올인드)
191{
192콘솔.쓰기(vi +" ");
193 if(vi)
194dvCnt++;
195}
196콘솔.쓰기("<> ");
197 foreach (문자열kinSDV.비올렉.열쇠)
198콘솔.쓰기(k +" ");
199Console.WriteLine("<<");
200}
201}
202 if(dvCnt != 5)
203{
204Console.WriteLine("*** db에 대한 도메인 위반 횟수는 5여야 하는데 "+ dvCnt);
205 반환1;
206}
207
208 // 이제 보고된 위반 기록의 양을 총 3으로 제한합니다.
209dvCnt = 0;
210Console.WriteLine("DB의 도메인 위반:");
211 foreach (GAMSDatabaseDomainViolationDDVindb.GetDatabaseDVs(3))
212{
213Console.WriteLine(" > "+ DDV.비올심.이름 + ": ");
214 foreach (GAMSSymbolDomainViolationSDVinDDV.ViolRecs)
215{
216콘솔.쓰기(" ");
217 foreach (부울viinSDV.비올인드)
218콘솔.쓰기(vi +" ");
219콘솔.쓰기("<> ");
220 foreach (문자열kSDV.비올렉.)
221콘솔.쓰기(k +" ");
222Console.WriteLine("<<");
223dvCnt++;
224}
225}
226 if(dvCnt != 3)
227{
228Console.WriteLine("*** db에 대한 도메인 위반 횟수는 3이어야 하는데 "+ dvCnt);
229 반환1;
230}
231 // 이제 보고되는 위반 기록의 양을 기호당 1개로 제한합니다.
232dvCnt = 0;
233Console.WriteLine("DB의 도메인 위반:");
234 foreach (GAMSDatabaseDomainViolationDDVdb.GetDatabaseDVs(0, 1))
235{
236Console.WriteLine(" > "+ DDV.비올심.이름 + ": ");
237 foreach (GAMSSymbolDomainViolationSDVDDV.ViolRecs)
238{
239콘솔.쓰기(" ");
240 foreach (부울viinSDV.바이올인드)
241콘솔.쓰기(vi +" ");
242콘솔.쓰기("<> ");
243 foreach (문자열kinSDV.비올렉.)
244콘솔.쓰기(k +" ");
245Console.WriteLine("<<");
246dvCnt++;
247}
248}
249 if(dvCnt != 2)
250{
251Console.WriteLine("*** db에 대한 도메인 위반 횟수는 2여야 하는데 "+ dvCnt);
252 반환1;
253}
254
255 // 기본적으로 도메인 위반이 있는 GAMSDatabase를 내보낼 때 예외가 발생해야 합니다.
256 부울sawException =거짓;
257 시도해 보세요
258{
259db.내보내기("test.gdx");
260}
261 잡기
262{
263sawException =사실;
264db.SuppressAutoDomainChecking =;
265db.내보내기("test.gdx");
266}
267 if(!sawException)
268{
269Console.WriteLine("*** 기본적으로 도메인 위반이 포함된 메가 슬롯데이터베이스를 내보낼 수 없어야 합니다.");
270 반환1;
271}
272
273 // gdx에서 도메인 정보가 포함된 매개변수 읽기
274 메가 슬롯데이터베이스db2 = ws.AddDatabaseFromGDX("test.gdx");
276
277 // 매개변수의 도메인은 GAMSSet i 및 GAMSSet j여야 합니다.
278 foreach (객체항목d2.도메인)
279{
280 if(항목은GAMSSet)
281{
282 if (((GAMSSet)항목).이름 =="나")
283{
284 foreach (GAMSSetRecord우엘 (GAMSSet)항목)
285 if(!plants.Contains(uel.Key(0)))
286{
287Console.WriteLine("*** 예상치 못한 uel "+ uel.Key(0) +" 도메인 i에서 발견됨");
288 반환1;
289}
290}
291 그밖에 if (((GAMSSet)항목).이름 =="j")
292{
293 foreach (GAMSSetRecord우엘 (GAMSSet)항목)
294 if(!markets.Contains(uel.Key(0)))
295{
296Console.WriteLine("*** 예상치 못한 uel "+ uel.Key(0) +" 도메인 j에서 발견됨");
297 반환1;
298}
299}
300 그밖에
301{
302Console.WriteLine("*** GAMSSet i 및 j가 필요했지만 발견됨 "+ ((GAMSSet)항목).이름);
303 반환1;
304}
305}
306 그밖에
307{
308Console.WriteLine("*** GAMSSet을 도메인으로 예상했지만 완화된 도메인을 찾았습니다. "+ (문자열)항목);
309 반환1;
310}
311}
312
313 /* *************************************************************** *
314* 이 다음 섹션은 실제로 도메인 확인에 관한 것이 아니지만 우리는 *
315* 특정 작업이 예상대로 작동하는지 확인하세요. *
316 * *************************************************************** */
317
318 // 별칭을 세트로 읽어보세요
319 GAMSJobjAlias = ws.AddJobFromString(GetDataText());
320j별칭.실행();
321 GAMSSetii = jAlias.아웃DB.GetSet("ii");
322Console.WriteLine("별칭 집합의 요소:");
323 foreach (GAMSSetRecord항목inii)
324Console.WriteLine(" > "+ item.Key(0));
325
326 메가 슬롯데이터베이스testDB = ws.AddDatabase();
327 GAMSSettestSet = 테스트DB.추가세트("테스트", 1);
328
329 // 빈 UEL을 추가해 보세요
330테스트세트.AddRecord("");
331Console.WriteLine("빈 UEL을 추가한 후 테스트 세트의 요소:");
332Console.WriteLine(" > "+ testSet.NumberRecords);
333
334 // 메가 슬롯는 선행 공백이 관련되어 있는 동안 보류 중인 공백을 제거합니다.
335testSet.AddRecord(" a ").텍스트="a";
336Console.WriteLine("기록 'a'는 'a'와 동일해야 합니다:");
337Console.WriteLine(" > "+ 테스트세트.기록 찾기("a").텍스트);
338
339 // 메가 슬롯는 63자를 초과하는 UEL을 처리할 수 없습니다.
340 // 괜찮을 것 같아요 ...
341테스트세트.AddRecord("123456789012345678901234567890123456789012345678901234567890123").텍스트="알았어";
342 // ... 하지만 이건 아님
343sawException =거짓;
344 시도해 보세요
345{
346테스트세트.AddRecord("1234567890123456789012345678901234567890123456789012345678901234").텍스트="괜찮지 않음";
347}
348 잡기
349{
350sawException =;
351}
352 if(!sawException)
353{
354Console.WriteLine("*** 63자를 초과하는 레코드를 추가하는 것은 불가능해야 합니다.");
355 반환1;
356}
357
358 // 메가 슬롯는 255자를 초과하는 설명 텍스트를 처리할 수 없습니다.
359테스트DB.추가세트("텍스트 확인", "12345678901234567890123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789012345678901 23456789012345678901234567890123456789012345678901234567890123456789 012345678901234567890123456789012345678901234567890123456789012345");
360sawException =거짓;
361 시도해 보세요
362{
363테스트DB.AddSet("textNotOK", "123456789012345678901234567890123456789012345678901234 56789012345678901234567890123456789012345678901234567890123456789012 34567890123456789012345678901234567890123456789012345678901234567890 123456789012345678901234567890123456789012345678901234567890123456");
364}
365 잡기
366{
367sawException =;
368}
369 if(!sawException)
370{
371Console.WriteLine("*** 255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.");
372 반환1;
373}
374
375testSet.AddRecord("알았어").텍스트="12345678901234567890123456789012345678901234567890123 45678901234567890123456789012345678901234567890123456789012345678901 23456789012345678901234567890123456789012345678901234567890123456789 012345678901234567890123456789012345678901234567890123456789012345";
376sawException =거짓;
377 시도
378{
379testSet.AddRecord("안돼").텍스트="123456789012345678901234567890123456789012345678901234 56789012345678901234567890123456789012345678901234567890123456789012 34567890123456789012345678901234567890123456789012345678901234567890 123456789012345678901234567890123456789012345678901234567890123456";
380}
381 잡기
382{
383sawException =;
384}
385 if(!sawException)
386{
387Console.WriteLine("*** 255자를 초과하는 설명 텍스트를 추가하는 것은 불가능해야 합니다.");
388 반환1;
389}
390
391 // 메가 슬롯는 작은따옴표와 큰따옴표가 포함된 UEL을 처리할 수 있지만 동시에 처리할 수는 없습니다.
392testSet.AddRecord("인용문'");
393testSet.AddRecord("인용문\"");
394sawException =거짓;
395 시도
396{
397테스트세트.AddRecord("인용문'\"");
398}
399 잡기
400{
401sawException =;
402}
403 if(!sawException)
404{
405Console.WriteLine("*** 레코드에 작은따옴표와 큰따옴표를 추가하는 것은 불가능해야 합니다.");
406 반환1;
407}
408
409테스트DB.내보내기("test.gdx");
410
411 반환0;
412}
413
414 정적문자열 GetDataText()
415{
416문자열 데이터 =@"
417세트
418i 통조림 공장 / 시애틀, 샌디에고 /;
419
420별칭 (i,ii);";
421 반환데이터;
422}
423
424}
425}
목록< GAMSSymbolDomainViolation > ViolRecs
GAMSSet AddSet(문자열 식별자, 정수 차원, 문자열 설명텍스트="", SetType setType=SetType.multi)
GAMSParameter GetParameter(문자열 매개변수 식별자)
GAMSSet GetSet(string setIdentifier)
내보내기 무효(문자열 filePath=null)
메가 슬롯데이터베이스 OutDB
void Run(GAMSOptions gamsOptions=null, GAMSCheckpoint 체크포인트=null, TextWriter 출력=null, Boolean createOutDB=true)
새 GAMSParameterRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord AddRecord(params 문자열[] 키)
새 GAMSSetRecord FindRecord(params 문자열[] 키)
GAMSDatabase AddDatabase(문자열 데이터베이스 이름=null, 문자열 inModelName=null)