@@ -24,211 +24,120 @@ AIDFSTest >> setUp [
24
24
AIDFSTest >> testAseCircuitGraph [
25
25
26
26
" Tests DFS on a cyclic graph with multiple paths"
27
- | graph graphType |
28
- graphType := AICyclicNonWeightedSimpleFixture new .
29
- graph := graphType aseCircuitGraph.
30
- dfsp nodes: graph nodes.
31
- dfsp edges: graph edges from: #first to: #second .
32
-
33
- " Test basic path finding"
34
- self assert: (#( $a $b $c ) hasEqualElements: (dfsp runFrom: $a to: $c)).
35
- dfsp resetValues.
36
-
37
- self assert: (#( $d $b $c ) hasEqualElements: (dfsp runFrom: $d to: $c)).
38
- dfsp resetValues.
39
-
40
- self assert: (#( $e $a ) hasEqualElements: (dfsp runFrom: $e to: $a)).
41
- dfsp resetValues.
42
-
43
- " Test longer path"
44
- self assert: (#( $a $b $c $f $g $h ) hasEqualElements: (dfsp runFrom: $a to: $h)).
45
- dfsp resetValues.
46
-
47
- " Test no path"
48
- self assert: (#() hasEqualElements: (dfsp runFrom: $f to: $a)).
49
- dfsp resetValues.
50
-
51
- " Test start equals end"
52
- self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
53
- dfsp resetValues.
54
-
55
- " Test discovery and finish times for a few nodes"
56
- dfsp runFrom: $a.
57
-
58
- " Verify relative order of discovery and finish times"
59
- self assert: (dfsp findNode: $a) discoveryTime < (dfsp findNode: $a) finishTime.
60
- self assert: (dfsp findNode: $b) discoveryTime < (dfsp findNode: $b) finishTime.
61
- self assert: (dfsp findNode: $c) discoveryTime < (dfsp findNode: $c) finishTime.
62
- self assert: (dfsp findNode: $d) discoveryTime < (dfsp findNode: $d) finishTime.
63
- self assert: (dfsp findNode: $e) discoveryTime < (dfsp findNode: $e) finishTime.
64
- self assert: (dfsp findNode: $f) discoveryTime < (dfsp findNode: $f) finishTime.
65
- self assert: (dfsp findNode: $g) discoveryTime < (dfsp findNode: $g) finishTime.
66
- self assert: (dfsp findNode: $h) discoveryTime < (dfsp findNode: $h) finishTime.
67
-
68
- " Verify that $a is discovered first and finished last"
69
- self assert: (dfsp findNode: $a) discoveryTime equals: 1 .
70
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $b) finishTime.
71
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $c) finishTime.
72
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $d) finishTime.
73
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $e) finishTime.
74
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $f) finishTime.
75
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $g) finishTime.
76
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $h) finishTime.
77
-
78
- dfsp resetValues.
27
+ | graph graphType |
28
+ graphType := AICyclicNonWeightedSimpleFixture new .
29
+ graph := graphType aseCircuitGraph.
30
+ dfsp nodes: graph nodes.
31
+ dfsp edges: graph edges from: #first to: #second .
32
+
33
+ " Test basic path finding"
34
+ self assert:
35
+ (#( $a $b $c ) hasEqualElements: (dfsp runFrom: $a to: $c)).
36
+ dfsp resetValues.
37
+
38
+ self assert:
39
+ (#( $d $b $c ) hasEqualElements: (dfsp runFrom: $d to: $c)).
40
+ dfsp resetValues.
41
+
42
+ self assert: (#( $e $a ) hasEqualElements: (dfsp runFrom: $e to: $a)).
43
+ dfsp resetValues.
44
+
45
+ " Test longer path"
46
+ self assert:
47
+ (#( $a $b $c $f $g $h ) hasEqualElements: (dfsp runFrom: $a to: $h)).
48
+ dfsp resetValues.
49
+
50
+ " Test no path"
51
+ self assert: (#( ) hasEqualElements: (dfsp runFrom: $f to: $a)).
52
+ dfsp resetValues.
53
+
54
+ " Test start equals end"
55
+ self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
56
+ dfsp resetValues.
79
57
]
80
58
81
59
{ #category : ' tests' }
82
60
AIDFSTest >> testComplexCycleGraph [
83
61
84
62
" Tests DFS on a complex cyclic graph"
85
- | graph graphType |
86
- graphType := AICyclicNonWeightedComplexFixture new .
87
- graph := graphType complexCycleGraph.
88
- dfsp nodes: graph nodes.
89
- dfsp edges: graph edges from: #first to: #second .
90
-
91
- " Test basic path finding"
92
- self assert: (#( $a $b $e ) hasEqualElements: (dfsp runFrom: $a to: $e)).
93
- dfsp resetValues.
94
-
95
- self assert: (#( $a $c $d $f ) hasEqualElements: (dfsp runFrom: $a to: $f)).
96
- dfsp resetValues.
97
-
98
- " Test no path"
99
- self assert: (#() hasEqualElements: (dfsp runFrom: $h to: $a)).
100
- dfsp resetValues.
101
-
102
- " Test start equals end"
103
- self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
104
- dfsp resetValues.
105
-
106
- " Test discovery and finish times for a few nodes"
107
- dfsp runFrom: $a.
108
-
109
- " Verify relative order of discovery and finish times"
110
- self assert: (dfsp findNode: $a) discoveryTime < (dfsp findNode: $a) finishTime.
111
- self assert: (dfsp findNode: $b) discoveryTime < (dfsp findNode: $b) finishTime.
112
- self assert: (dfsp findNode: $c) discoveryTime < (dfsp findNode: $c) finishTime.
113
- self assert: (dfsp findNode: $d) discoveryTime < (dfsp findNode: $d) finishTime.
114
- self assert: (dfsp findNode: $e) discoveryTime < (dfsp findNode: $e) finishTime.
115
- self assert: (dfsp findNode: $f) discoveryTime < (dfsp findNode: $f) finishTime.
116
- self assert: (dfsp findNode: $g) discoveryTime < (dfsp findNode: $g) finishTime.
117
- self assert: (dfsp findNode: $h) discoveryTime < (dfsp findNode: $h) finishTime.
118
-
119
- " Verify that $a is discovered first and finished last"
120
- self assert: (dfsp findNode: $a) discoveryTime equals: 1 .
121
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $b) finishTime.
122
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $c) finishTime.
123
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $d) finishTime.
124
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $e) finishTime.
125
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $f) finishTime.
126
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $g) finishTime.
127
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $h) finishTime.
128
-
129
- dfsp resetValues.
63
+ | graph graphType |
64
+ graphType := AICyclicNonWeightedComplexFixture new .
65
+ graph := graphType complexCycleGraph.
66
+ dfsp nodes: graph nodes.
67
+ dfsp edges: graph edges from: #first to: #second .
68
+
69
+ " Test basic path finding"
70
+ self assert:
71
+ (#( $a $b $e ) hasEqualElements: (dfsp runFrom: $a to: $e)).
72
+ dfsp resetValues.
73
+
74
+ self assert:
75
+ (#( $a $c $d $f ) hasEqualElements: (dfsp runFrom: $a to: $f)).
76
+ dfsp resetValues.
77
+
78
+ " Test no path"
79
+ self assert: (#( ) hasEqualElements: (dfsp runFrom: $h to: $a)).
80
+ dfsp resetValues.
81
+
82
+ " Test start equals end"
83
+ self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
84
+ dfsp resetValues.
130
85
]
131
86
132
87
{ #category : ' tests' }
133
88
AIDFSTest >> testSimpleGraph [
134
89
135
90
" Tests DFS on a simple directed acyclic graph (DAG)"
136
- | graph graphType |
137
- graphType := AINonWeightedDAGFixture new .
138
- graph := graphType simpleGraph.
139
- dfsp nodes: graph nodes.
140
- dfsp edges: graph edges from: #first to: #second .
141
-
142
- " Test basic path finding"
143
- self assert: (#( $a $b $c ) hasEqualElements: (dfsp runFrom: $a to: $c)).
144
- dfsp resetValues.
145
-
146
- self assert: (#( $d $c ) hasEqualElements: (dfsp runFrom: $d to: $c)).
147
- dfsp resetValues.
148
-
149
- " Test start equals end"
150
- self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
151
- dfsp resetValues.
152
-
153
- " Test no path"
154
- self assert: (#() hasEqualElements: (dfsp runFrom: $c to: $a)).
155
- dfsp resetValues.
156
-
157
- " Test discovery and finish times for a few nodes"
158
- dfsp runFrom: $a.
159
-
160
- " Verify relative order of discovery and finish times"
161
- self assert: (dfsp findNode: $a) discoveryTime < (dfsp findNode: $a) finishTime.
162
- self assert: (dfsp findNode: $b) discoveryTime < (dfsp findNode: $b) finishTime.
163
- self assert: (dfsp findNode: $c) discoveryTime < (dfsp findNode: $c) finishTime.
164
-
165
- " Verify that $a is discovered first and finished last"
166
- self assert: (dfsp findNode: $a) discoveryTime equals: 1 .
167
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $b) finishTime.
168
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $c) finishTime.
169
-
170
- dfsp resetValues.
91
+ | graph graphType |
92
+ graphType := AINonWeightedDAGFixture new .
93
+ graph := graphType simpleGraph.
94
+ dfsp nodes: graph nodes.
95
+ dfsp edges: graph edges from: #first to: #second .
96
+
97
+ " Test basic path finding"
98
+ self assert:
99
+ (#( $a $b $c ) hasEqualElements: (dfsp runFrom: $a to: $c)).
100
+ dfsp resetValues.
101
+
102
+ self assert: (#( $d $c ) hasEqualElements: (dfsp runFrom: $d to: $c)).
103
+ dfsp resetValues.
104
+
105
+ " Test start equals end"
106
+ self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
107
+ dfsp resetValues.
108
+
109
+ " Test no path"
110
+ self assert: (#( ) hasEqualElements: (dfsp runFrom: $c to: $a)).
111
+ dfsp resetValues.
171
112
]
172
113
173
114
{ #category : ' tests' }
174
115
AIDFSTest >> testWithoutCyclesMediumGraph [
175
116
176
117
" Tests DFS on a medium-sized DAG without cycles"
177
- | graph graphType |
178
- graphType := AINonWeightedDAGFixture new .
179
- graph := graphType withoutCyclesMediumGraph.
180
- dfsp nodes: graph nodes.
181
- dfsp edges: graph edges from: #first to: #second .
182
-
183
- " Test basic path finding"
184
- self assert: (#( $a $e ) hasEqualElements: (dfsp runFrom: $a to: $e)).
185
- dfsp resetValues.
186
-
187
- self assert: (#( $b $c ) hasEqualElements: (dfsp runFrom: $b to: $c)).
188
- dfsp resetValues.
189
-
190
- " Test longer path"
191
- self assert: (#( $b $h $d $f ) hasEqualElements: (dfsp runFrom: $b to: $f)).
192
- dfsp resetValues.
193
-
194
- " Test no path"
195
- self assert: (#() hasEqualElements: (dfsp runFrom: $f to: $a)).
196
- dfsp resetValues.
197
-
198
- " Test start equals end"
199
- self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
200
- dfsp resetValues.
201
-
202
- " Test discovery and finish times for reachable nodes"
203
- dfsp runFrom: $a.
204
-
205
- " Verify relative order of discovery and finish times for reachable nodes"
206
- self assert: (dfsp findNode: $a) discoveryTime < (dfsp findNode: $a) finishTime.
207
- self assert: (dfsp findNode: $e) discoveryTime < (dfsp findNode: $e) finishTime.
208
- self assert: (dfsp findNode: $g) discoveryTime < (dfsp findNode: $g) finishTime.
209
- self assert: (dfsp findNode: $f) discoveryTime < (dfsp findNode: $f) finishTime.
210
-
211
- " Verify that $a is discovered first and finished last in its component"
212
- self assert: (dfsp findNode: $a) discoveryTime equals: 1 .
213
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $e) finishTime.
214
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $g) finishTime.
215
- self assert: (dfsp findNode: $a) finishTime > (dfsp findNode: $f) finishTime.
216
-
217
- " Run DFS on the second component (starting from $b)"
218
- dfsp resetValues.
219
- dfsp runFrom: $b.
220
-
221
- " Verify relative order of discovery and finish times for the second component"
222
- self assert: (dfsp findNode: $b) discoveryTime < (dfsp findNode: $b) finishTime.
223
- self assert: (dfsp findNode: $c) discoveryTime < (dfsp findNode: $c) finishTime.
224
- self assert: (dfsp findNode: $h) discoveryTime < (dfsp findNode: $h) finishTime.
225
- self assert: (dfsp findNode: $d) discoveryTime < (dfsp findNode: $d) finishTime.
226
-
227
- " Verify that $b is discovered first and finished last in its component"
228
- self assert: (dfsp findNode: $b) discoveryTime equals: 1 .
229
- self assert: (dfsp findNode: $b) finishTime > (dfsp findNode: $c) finishTime.
230
- self assert: (dfsp findNode: $b) finishTime > (dfsp findNode: $h) finishTime.
231
- self assert: (dfsp findNode: $b) finishTime > (dfsp findNode: $d) finishTime.
232
-
233
- dfsp resetValues.
118
+ | graph graphType |
119
+ graphType := AINonWeightedDAGFixture new .
120
+ graph := graphType withoutCyclesMediumGraph.
121
+ dfsp nodes: graph nodes.
122
+ dfsp edges: graph edges from: #first to: #second .
123
+
124
+ " Test basic path finding"
125
+ self assert: (#( $a $e ) hasEqualElements: (dfsp runFrom: $a to: $e)).
126
+ dfsp resetValues.
127
+
128
+ self assert: (#( $b $c ) hasEqualElements: (dfsp runFrom: $b to: $c)).
129
+ dfsp resetValues.
130
+
131
+ " Test longer path"
132
+ self assert:
133
+ (#( $b $h $d $f ) hasEqualElements: (dfsp runFrom: $b to: $f)).
134
+ dfsp resetValues.
135
+
136
+ " Test no path"
137
+ self assert: (#( ) hasEqualElements: (dfsp runFrom: $f to: $a)).
138
+ dfsp resetValues.
139
+
140
+ " Test start equals end"
141
+ self assert: (#( $a ) hasEqualElements: (dfsp runFrom: $a to: $a)).
142
+ dfsp resetValues.
234
143
]
0 commit comments