18 assert: col anySatisfy: block |
18 assert: col anySatisfy: block |
19 self assert: (col anySatisfy: block). |
19 self assert: (col anySatisfy: block). |
20 ! |
20 ! |
21 |
21 |
22 setUp |
22 setUp |
23 a := PEGFsaState new name: #a; retval: #a; yourself. |
23 a := PEGFsaState new name: #a; retval: #token; yourself. |
24 b := PEGFsaState new name: #b; retval: #b; yourself. |
24 b := PEGFsaState new name: #b; retval: #token; yourself. |
25 c := PEGFsaState new name: #c; retval: #c; yourself. |
25 c := PEGFsaState new name: #c; retval: #token; yourself. |
26 d := PEGFsaState new name: #d; retval: #d; yourself. |
26 d := PEGFsaState new name: #d; retval: #token; yourself. |
27 e := PEGFsaState new name: #e; retval: #e; yourself. |
27 e := PEGFsaState new name: #e; retval: #token; yourself. |
28 |
28 |
29 fsa := PEGFsa new. |
29 fsa := PEGFsa new. |
30 ! |
30 ! |
|
31 |
|
32 testMergeTransitions |
|
33 fsa addState: a. |
|
34 fsa addState: b. |
|
35 fsa startState: a. |
|
36 fsa finalState: b. |
|
37 |
|
38 fsa addTransitionFrom: a to: b on: $a. |
|
39 fsa addTransitionFrom: a to: b on: $b. |
|
40 |
|
41 fsa mergeTransitions. |
|
42 |
|
43 self assert: a transitions size = 1. |
|
44 self assert: (a transitions anyOne accepts: $a). |
|
45 self assert: (a transitions anyOne accepts: $b). |
|
46 ! |
|
47 |
|
48 testMergeTransitions2 |
|
49 fsa addState: a. |
|
50 fsa addState: b. |
|
51 fsa addState: c. |
|
52 fsa startState: a. |
|
53 fsa finalState: b. |
|
54 |
|
55 fsa addTransitionFrom: a to: b on: $a. |
|
56 fsa addTransitionFrom: a to: c on: $b. |
|
57 |
|
58 fsa mergeTransitions. |
|
59 |
|
60 self assert: a transitions size = 2. |
|
61 ! |
|
62 |
|
63 testRemoveEpsilons |
|
64 fsa addState: a. |
|
65 fsa addState: b. |
|
66 fsa addState: c. |
|
67 fsa startState: a. |
|
68 fsa finalState: c. |
|
69 |
|
70 fsa addTransitionFrom: a to: b. |
|
71 fsa addTransitionFrom: b to: c on: $c. |
|
72 |
|
73 fsa removeEpsilons. |
|
74 |
|
75 self assert: a transitions size = 1. |
|
76 self assert: b transitions size = 1. |
|
77 self assert: a transitions anyOne isEpsilon not. |
|
78 self assert: (a transitions anyOne accepts: $c). |
|
79 self assert: (fsa isReachableState: c). |
|
80 self assert: (fsa isReachableState: b) not. |
|
81 self assert: fsa isWithoutEpsilons. |
|
82 ! |
|
83 |
|
84 testRemoveEpsilons2 |
|
85 fsa addState: a. |
|
86 fsa addState: b. |
|
87 fsa addState: c. |
|
88 fsa startState: a. |
|
89 fsa finalState: c. |
|
90 |
|
91 fsa addTransitionFrom: a to: b. |
|
92 fsa addTransitionFrom: a to: b on: $b. |
|
93 fsa addTransitionFrom: b to: c on: $c. |
|
94 |
|
95 fsa removeEpsilons. |
|
96 |
|
97 self assert: a transitions size = 2. |
|
98 self assert: b transitions size = 1. |
|
99 self assert: (a transitions noneSatisfy: [:t | t isEpsilon ]). |
|
100 self assert: (a transitions anySatisfy: [:t | t accepts: $c ]). |
|
101 self assert: (a transitions anySatisfy: [:t | t accepts: $b ]). |
|
102 ! |
|
103 |
|
104 testRemoveEpsilons3 |
|
105 fsa addState: a. |
|
106 fsa addState: b. |
|
107 fsa addState: c. |
|
108 fsa addState: d. |
|
109 fsa startState: a. |
|
110 fsa finalState: d. |
|
111 |
|
112 fsa addTransitionFrom: a to: b. |
|
113 fsa addTransitionFrom: b to: c. |
|
114 fsa addTransitionFrom: c to: d on: $d. |
|
115 |
|
116 fsa removeEpsilons. |
|
117 |
|
118 self assert: a transitions size = 1. |
|
119 |
|
120 self assert: a transitions anyOne isEpsilon not. |
|
121 self assert: (a transitions anyOne accepts: $d). |
|
122 self assert: (fsa isReachableState: d). |
|
123 self assert: (fsa isReachableState: b) not. |
|
124 self assert: (fsa isReachableState: c) not. |
|
125 ! |
|
126 |
|
127 testRemoveEpsilons4 |
|
128 fsa addState: a. |
|
129 fsa addState: b. |
|
130 fsa startState: a. |
|
131 fsa finalState: b. |
|
132 |
|
133 fsa addTransitionFrom: a to: b. |
|
134 |
|
135 fsa removeEpsilons. |
|
136 |
|
137 self assert: a isFinal. |
|
138 ! |
|
139 |
|
140 testRemoveEpsilons5 |
|
141 fsa addState: a. |
|
142 fsa addState: b. |
|
143 fsa addState: c. |
|
144 fsa addState: d. |
|
145 fsa startState: a. |
|
146 fsa finalState: d. |
|
147 |
|
148 fsa addTransitionFrom: a to: b on: $a. |
|
149 fsa addTransitionFrom: b to: a. |
|
150 |
|
151 fsa removeEpsilons. |
|
152 |
|
153 self assert: fsa isWithoutEpsilons. |
|
154 |
|
155 self assert: a transitions size = 1. |
|
156 self assert: b transitions size = 1. |
|
157 self assert: (a transitions anyOne == b transitions anyOne) not. |
|
158 ! |
|
159 |
|
160 testRemoveEpsilons6 |
|
161 fsa addState: a. |
|
162 fsa addState: b. |
|
163 fsa addState: c. |
|
164 fsa addState: d. |
|
165 fsa startState: a. |
|
166 fsa finalState: d. |
|
167 |
|
168 fsa addTransitionFrom: a to: b on: $a. |
|
169 fsa addTransitionFrom: b to: c. |
|
170 fsa addTransitionFrom: c to: d on: $b. |
|
171 d priority: -1. |
|
172 |
|
173 fsa removeEpsilons. |
|
174 |
|
175 self assert: fsa isWithoutEpsilons. |
|
176 |
|
177 self assert: a transitions size = 1. |
|
178 self assert: b transitions size = 1. |
|
179 self assert: a destination destination = d. |
|
180 self assert: d priority = -1. |
|
181 ! |
|
182 |
|
183 testRemoveEpsilons7 |
|
184 fsa addState: a. |
|
185 fsa addState: b. |
|
186 fsa addState: c. |
|
187 fsa startState: a. |
|
188 fsa finalState: a. |
|
189 fsa finalState: b. |
|
190 fsa finalState: c. |
|
191 |
|
192 fsa addTransitionFrom: a to: b. |
|
193 fsa addTransitionFrom: b to: c on: $a. |
|
194 |
|
195 |
|
196 a priority: -1. |
|
197 b priority: -1. |
|
198 c priority: -1. |
|
199 |
|
200 a failure: true. |
|
201 b retval: #b. |
|
202 |
|
203 fsa removeEpsilons. |
|
204 |
|
205 self assert: fsa isWithoutEpsilons. |
|
206 |
|
207 self assert: a transitions size = 1. |
|
208 self assert: a destination = c. |
|
209 self assert: a isFinal. |
|
210 self assert: a isFsaFailure not. |
|
211 self assert: a retval = #b. |
|
212 self assert: a priority = -1. |
|
213 self assert: c priority = -1. |
|
214 |
|
215 ! |
|
216 |
|
217 testRemoveLowPriorityTransitions |
|
218 fsa addState: a. |
|
219 fsa addState: b. |
|
220 fsa addState: c. |
|
221 fsa startState: a. |
|
222 fsa finalState: a. |
|
223 fsa finalState: b. |
|
224 fsa finalState: c. |
|
225 |
|
226 b priority: 0. |
|
227 fsa addTransitionFrom: a to: b on: $a priority: 0. |
|
228 fsa addTransitionFrom: b to: c on: $b priority: -1. |
|
229 |
|
230 fsa removeLowPriorityTransitions. |
|
231 self assert: fsa isWithoutEpsilons. |
|
232 |
|
233 self assert: a transitions size = 1. |
|
234 self assert: b transitions size = 0. |
|
235 ! |
|
236 |
|
237 testRemoveUnreachableStates |
|
238 fsa addState: a. |
|
239 fsa addState: b. |
|
240 fsa addState: c. |
|
241 fsa startState: a. |
|
242 fsa finalState: c. |
|
243 |
|
244 fsa addTransitionFrom: a to: c. |
|
245 fsa addTransitionFrom: b to: c. |
|
246 |
|
247 fsa removeUnreachableStates. |
|
248 |
|
249 self assert: fsa states size = 2. |
|
250 ! ! |
|
251 |
|
252 !PEGFsaTest methodsFor:'tests - analysis'! |
31 |
253 |
32 testBackTransitions |
254 testBackTransitions |
33 fsa addState: a. |
255 fsa addState: a. |
34 fsa addState: b. |
256 fsa addState: b. |
35 fsa startState: a. |
257 fsa startState: a. |
113 result := fsa backTransitions. |
335 result := fsa backTransitions. |
114 |
336 |
115 self assert: result size = 0. |
337 self assert: result size = 0. |
116 ! |
338 ! |
117 |
339 |
118 testDeterminize |
340 testHasDistinctRetvals |
119 fsa addState: a. |
|
120 fsa addState: b. |
|
121 fsa addState: c. |
|
122 fsa startState: a. |
|
123 fsa finalState: c. |
|
124 |
|
125 fsa addTransitionFrom: a to: b on: $a. |
|
126 fsa addTransitionFrom: a to: c on: $a. |
|
127 |
|
128 fsa determinize. |
|
129 |
|
130 self assert: fsa states size = 2. |
|
131 self assert: a transitions size = 1. |
|
132 self assert: a transitions anyOne destination retval = #c. |
|
133 ! |
|
134 |
|
135 testDeterminize2 |
|
136 fsa addState: a. |
|
137 fsa addState: b. |
|
138 fsa addState: c. |
|
139 fsa startState: a. |
|
140 fsa finalState: b. |
|
141 |
|
142 fsa addTransitionFrom: a to: b on: $a. |
|
143 fsa addTransitionFrom: a to: c on: $a. |
|
144 |
|
145 fsa determinize. |
|
146 |
|
147 self assert: fsa states size = 2. |
|
148 self assert: a transitions size = 1. |
|
149 self assert: a transitions anyOne destination retval = #b. |
|
150 ! |
|
151 |
|
152 testDeterminize3 |
|
153 | merged | |
|
154 fsa addState: a. |
341 fsa addState: a. |
155 fsa addState: b. |
342 fsa addState: b. |
156 fsa addState: c. |
343 fsa addState: c. |
157 fsa addState: d. |
344 fsa addState: d. |
158 fsa addState: e. |
345 |
159 |
346 fsa startState: a. |
160 fsa startState: a. |
347 fsa finalState: b. |
161 fsa finalState: e. |
348 fsa finalState: d. |
162 |
349 |
163 fsa addTransitionFrom: a to: b on: $a. |
350 a retval: nil. |
164 fsa addTransitionFrom: a to: c on: $a. |
351 b retval: #b. |
165 fsa addTransitionFrom: b to: e on: $e. |
352 c retval: nil. |
|
353 d retval: #c. |
|
354 |
|
355 fsa addTransitionFrom: a to: b on: $a. |
|
356 fsa addTransitionFrom: a to: c on: $b. |
166 fsa addTransitionFrom: c to: d on: $d. |
357 fsa addTransitionFrom: c to: d on: $d. |
167 fsa addTransitionFrom: d to: e on: $e. |
358 fsa addTransitionFrom: d to: c on: $c. |
168 |
359 |
169 fsa determinize. |
360 self assert: fsa hasDistinctRetvals. |
170 merged := a transitions anyOne destination. |
361 |
171 |
|
172 self assert: fsa states size = 4. |
|
173 self assert: a transitions size = 1. |
|
174 self assert: merged transitions size = 2. |
|
175 self assert: (merged transitions anySatisfy: [ :t | (t accepts: $d) and: [ t destination = d ]]). |
|
176 self assert: (merged transitions anySatisfy: [ :t | (t accepts: $e) and: [ t destination = e ]]). |
|
177 ! |
|
178 |
|
179 testDeterminize4 |
|
180 | merged | |
|
181 fsa addState: a. |
|
182 fsa addState: b. |
|
183 |
|
184 fsa startState: a. |
|
185 fsa finalState: b. |
|
186 |
|
187 fsa addTransitionFrom: a to: a on: $a. |
|
188 fsa addTransitionFrom: a to: b on: $a. |
|
189 |
|
190 fsa determinize. |
|
191 merged := a transitions anyOne destination. |
|
192 |
|
193 self assert: fsa states size = 2. |
|
194 self assert: a transitions size = 1. |
|
195 self assert: merged transitions size = 1. |
|
196 self assert: ((merged name = #'a-b') or: [merged name = #'b-a']). |
|
197 self assert: (merged transitions anySatisfy: [ :t | (t accepts: $a) and: [ t destination = merged ]]). |
|
198 ! |
|
199 |
|
200 testDeterminize5 |
|
201 | merged | |
|
202 fsa addState: a. |
|
203 fsa addState: b. |
|
204 fsa addState: c. |
|
205 fsa addState: d. |
|
206 fsa startState: a. |
|
207 fsa finalState: d. |
|
208 |
|
209 fsa addTransitionFrom: a to: b on: $a. |
|
210 fsa addTransitionFrom: b to: a. |
|
211 fsa addTransitionFrom: b to: c priority: -1. |
|
212 fsa addTransitionFrom: c to: d on: $a. |
|
213 b priority: 0. |
|
214 |
|
215 fsa determinize. |
|
216 merged := b transitions anyOne destination. |
|
217 |
|
218 self assert: fsa isDeterministic. |
|
219 self assert: fsa states size = 3. |
|
220 |
|
221 |
|
222 self assert: a transitions size = 1. |
|
223 self assert: b transitions size = 1. |
|
224 self assert: (fsa states noneSatisfy: [ :s | s isFinal ]). |
|
225 ! |
|
226 |
|
227 testDeterminize6 |
|
228 | merged | |
|
229 fsa addState: a. |
|
230 fsa addState: b. |
|
231 |
|
232 fsa startState: a. |
|
233 fsa finalState: b. |
|
234 |
|
235 fsa addTransitionFrom: a to: a on: $a. |
|
236 fsa addTransitionFrom: a to: b on: $a priority: -1. |
|
237 |
|
238 fsa determinize. |
|
239 self assert: fsa isDeterministic. |
|
240 self assert: fsa states size = 2. |
|
241 |
|
242 |
|
243 self assert: a transitions size = 1. |
|
244 self assert: a isFinal not. |
|
245 |
|
246 merged := a transitions anyOne destination. |
|
247 self assert: merged transitions size = 1. |
|
248 self assert: merged isFinal. |
|
249 ! |
362 ! |
250 |
363 |
251 testIsDeterministic |
364 testIsDeterministic |
252 fsa addState: a. |
365 fsa addState: a. |
253 fsa addState: b. |
366 fsa addState: b. |
283 |
396 |
284 fsa addTransitionFrom: a to: b. |
397 fsa addTransitionFrom: a to: b. |
285 fsa addTransitionFrom: b to: c on: $c. |
398 fsa addTransitionFrom: b to: c on: $c. |
286 |
399 |
287 self assert: fsa isWithoutEpsilons not. |
400 self assert: fsa isWithoutEpsilons not. |
288 ! |
|
289 |
|
290 testMergeTransitions |
|
291 fsa addState: a. |
|
292 fsa addState: b. |
|
293 fsa startState: a. |
|
294 fsa finalState: b. |
|
295 |
|
296 fsa addTransitionFrom: a to: b on: $a. |
|
297 fsa addTransitionFrom: a to: b on: $b. |
|
298 |
|
299 fsa mergeTransitions. |
|
300 |
|
301 self assert: a transitions size = 1. |
|
302 self assert: (a transitions anyOne accepts: $a). |
|
303 self assert: (a transitions anyOne accepts: $b). |
|
304 ! |
|
305 |
|
306 testMergeTransitions2 |
|
307 fsa addState: a. |
|
308 fsa addState: b. |
|
309 fsa addState: c. |
|
310 fsa startState: a. |
|
311 fsa finalState: b. |
|
312 |
|
313 fsa addTransitionFrom: a to: b on: $a. |
|
314 fsa addTransitionFrom: a to: c on: $b. |
|
315 |
|
316 fsa mergeTransitions. |
|
317 |
|
318 self assert: a transitions size = 2. |
|
319 ! |
|
320 |
|
321 testMinimize |
|
322 | merged | |
|
323 fsa addState: a. |
|
324 fsa addState: b. |
|
325 fsa addState: c. |
|
326 fsa addState: d. |
|
327 fsa startState: a. |
|
328 fsa finalState: d. |
|
329 |
|
330 fsa addTransitionFrom: a to: b on: $b. |
|
331 fsa addTransitionFrom: a to: c on: $c. |
|
332 |
|
333 fsa addTransitionFrom: b to: d on: $a. |
|
334 fsa addTransitionFrom: c to: d on: $a. |
|
335 b retval: nil. |
|
336 c retval: nil. |
|
337 |
|
338 fsa minimize. |
|
339 |
|
340 self assert: fsa states size = 3. |
|
341 self assert: a transitions size = 1. |
|
342 |
|
343 merged := a transitions anyOne destination. |
|
344 self assert: merged transitions size = 1. |
|
345 self assert: merged transitions anyOne destination = d. |
|
346 self assert: (merged transitions anyOne accepts: $a). |
|
347 ! |
|
348 |
|
349 testMinimze2 |
|
350 | merged | |
|
351 fsa addState: a. |
|
352 fsa addState: b. |
|
353 fsa addState: c. |
|
354 fsa addState: d. |
|
355 fsa addState: e. |
|
356 |
|
357 fsa startState: a. |
|
358 fsa finalState: e. |
|
359 |
|
360 "states c and d are equivalent" |
|
361 fsa addTransitionFrom: a to: b on: $a. |
|
362 fsa addTransitionFrom: b to: c on: $c priority: -1. |
|
363 fsa addTransitionFrom: b to: d on: $d priority: -2. |
|
364 fsa addTransitionFrom: c to: e on: $e priority: -3. |
|
365 fsa addTransitionFrom: d to: e on: $e priority: -4. |
|
366 |
|
367 c retval: nil. |
|
368 d retval: nil. |
|
369 |
|
370 fsa minimize. |
|
371 |
|
372 self assert: fsa isDeterministic. |
|
373 self assert: fsa states size = 4. |
|
374 |
|
375 self assert: b transitions size = 1. |
|
376 |
|
377 merged := b destination. |
|
378 self assert: merged transitions size = 1. |
|
379 self assert: merged destination isFinal. |
|
380 ! |
|
381 |
|
382 testRemoveEpsilons |
|
383 fsa addState: a. |
|
384 fsa addState: b. |
|
385 fsa addState: c. |
|
386 fsa startState: a. |
|
387 fsa finalState: c. |
|
388 |
|
389 fsa addTransitionFrom: a to: b. |
|
390 fsa addTransitionFrom: b to: c on: $c. |
|
391 |
|
392 fsa removeEpsilons. |
|
393 |
|
394 self assert: a transitions size = 1. |
|
395 self assert: b transitions size = 1. |
|
396 self assert: a transitions anyOne isEpsilon not. |
|
397 self assert: (a transitions anyOne accepts: $c). |
|
398 self assert: (fsa isReachableState: c). |
|
399 self assert: (fsa isReachableState: b) not. |
|
400 self assert: fsa isWithoutEpsilons. |
|
401 ! |
|
402 |
|
403 testRemoveEpsilons2 |
|
404 fsa addState: a. |
|
405 fsa addState: b. |
|
406 fsa addState: c. |
|
407 fsa startState: a. |
|
408 fsa finalState: c. |
|
409 |
|
410 fsa addTransitionFrom: a to: b. |
|
411 fsa addTransitionFrom: a to: b on: $b. |
|
412 fsa addTransitionFrom: b to: c on: $c. |
|
413 |
|
414 fsa removeEpsilons. |
|
415 |
|
416 self assert: a transitions size = 2. |
|
417 self assert: b transitions size = 1. |
|
418 self assert: (a transitions noneSatisfy: [:t | t isEpsilon ]). |
|
419 self assert: (a transitions anySatisfy: [:t | t accepts: $c ]). |
|
420 self assert: (a transitions anySatisfy: [:t | t accepts: $b ]). |
|
421 ! |
|
422 |
|
423 testRemoveEpsilons3 |
|
424 fsa addState: a. |
|
425 fsa addState: b. |
|
426 fsa addState: c. |
|
427 fsa addState: d. |
|
428 fsa startState: a. |
|
429 fsa finalState: d. |
|
430 |
|
431 fsa addTransitionFrom: a to: b. |
|
432 fsa addTransitionFrom: b to: c. |
|
433 fsa addTransitionFrom: c to: d on: $d. |
|
434 |
|
435 fsa removeEpsilons. |
|
436 |
|
437 self assert: a transitions size = 1. |
|
438 |
|
439 self assert: a transitions anyOne isEpsilon not. |
|
440 self assert: (a transitions anyOne accepts: $d). |
|
441 self assert: (fsa isReachableState: d). |
|
442 self assert: (fsa isReachableState: b) not. |
|
443 self assert: (fsa isReachableState: c) not. |
|
444 ! |
|
445 |
|
446 testRemoveEpsilons4 |
|
447 fsa addState: a. |
|
448 fsa addState: b. |
|
449 fsa startState: a. |
|
450 fsa finalState: b. |
|
451 |
|
452 fsa addTransitionFrom: a to: b. |
|
453 |
|
454 fsa removeEpsilons. |
|
455 |
|
456 self assert: a isFinal. |
|
457 ! |
|
458 |
|
459 testRemoveEpsilons5 |
|
460 fsa addState: a. |
|
461 fsa addState: b. |
|
462 fsa addState: c. |
|
463 fsa addState: d. |
|
464 |
|
465 |
|
466 fsa startState: a. |
|
467 fsa finalState: d. |
|
468 |
|
469 c priority: 0. |
|
470 d priority: 0. |
|
471 |
|
472 fsa addTransitionFrom: a to: b priority: -1. |
|
473 fsa addTransitionFrom: a to: c on: $c. |
|
474 fsa addTransitionFrom: b to: d on: $d. |
|
475 fsa addTransitionFrom: c to: d on: $d. |
|
476 |
|
477 fsa removeEpsilons. |
|
478 |
|
479 self assert: c priority = 0. |
|
480 self assert: d priority = -1. |
|
481 self assert: (a transitions anySatisfy: [:t | t accepts: $d ]). |
|
482 ! |
|
483 |
|
484 testRemoveEpsilons6 |
|
485 fsa addState: a. |
|
486 fsa addState: b. |
|
487 fsa addState: c. |
|
488 fsa addState: d. |
|
489 fsa startState: a. |
|
490 fsa finalState: d. |
|
491 |
|
492 fsa addTransitionFrom: a to: b on: $a. |
|
493 fsa addTransitionFrom: b to: a. |
|
494 fsa addTransitionFrom: b to: c priority: -1. |
|
495 fsa addTransitionFrom: c to: d on: $b. |
|
496 |
|
497 d priority: 0. |
|
498 |
|
499 fsa removeEpsilons. |
|
500 |
|
501 self assert: fsa isWithoutEpsilons. |
|
502 |
|
503 self assert: a transitions size = 1. |
|
504 self assert: b transitions size = 2. |
|
505 self assert: b transitions anySatisfy: [ :t | (t accepts: $a) and: [t destination = b]]. |
|
506 self assert: b transitions anySatisfy: [ :t | (t accepts: $b) and: [t destination = d]]. |
|
507 |
|
508 self assert: d priority = -1. |
|
509 ! |
|
510 |
|
511 testRemoveEpsilons7 |
|
512 fsa addState: a. |
|
513 fsa addState: b. |
|
514 fsa addState: c. |
|
515 fsa addState: d. |
|
516 fsa startState: a. |
|
517 fsa finalState: d. |
|
518 |
|
519 fsa addTransitionFrom: a to: b on: $a. |
|
520 fsa addTransitionFrom: b to: a. |
|
521 |
|
522 fsa removeEpsilons. |
|
523 |
|
524 self assert: fsa isWithoutEpsilons. |
|
525 |
|
526 self assert: a transitions size = 1. |
|
527 self assert: b transitions size = 1. |
|
528 self assert: (a transitions anyOne == b transitions anyOne) not. |
|
529 ! |
|
530 |
|
531 testRemoveLowPriorityTransitions |
|
532 fsa addState: a. |
|
533 fsa addState: b. |
|
534 fsa addState: c. |
|
535 fsa startState: a. |
|
536 fsa finalState: a. |
|
537 fsa finalState: b. |
|
538 fsa finalState: c. |
|
539 |
|
540 b priority: 0. |
|
541 fsa addTransitionFrom: a to: b on: $a priority: -1. |
|
542 fsa addTransitionFrom: b to: c on: $b priority: -1. |
|
543 |
|
544 fsa removeLowPriorityTransitions. |
|
545 |
|
546 self assert: fsa isWithoutEpsilons. |
|
547 |
|
548 self assert: a transitions size = 1. |
|
549 self assert: b transitions size = 0. |
|
550 ! |
|
551 |
|
552 testRemoveUnreachableStates |
|
553 fsa addState: a. |
|
554 fsa addState: b. |
|
555 fsa addState: c. |
|
556 fsa startState: a. |
|
557 fsa finalState: c. |
|
558 |
|
559 fsa addTransitionFrom: a to: c. |
|
560 fsa addTransitionFrom: b to: c. |
|
561 |
|
562 fsa removeUnreachableStates. |
|
563 |
|
564 self assert: fsa states size = 2. |
|
565 ! |
401 ! |
566 |
402 |
567 testTopologicalOrder |
403 testTopologicalOrder |
568 | | |
404 | | |
569 fsa addState: a. |
405 fsa addState: a. |