Skip to content

Commit 1452de1

Browse files
committed
Removed implementation of discoveryTime and finishTime
1 parent 3463d2f commit 1452de1

File tree

3 files changed

+104
-231
lines changed

3 files changed

+104
-231
lines changed

src/AI-Algorithms-Graph-Components/AIDFSNode.class.st

+1-29
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,18 @@ Class {
66
#superclass : 'AIGraphNode',
77
#instVars : [
88
'previousNode',
9-
'visited',
10-
'discoveryTime',
11-
'finishTime'
9+
'visited'
1210
],
1311
#category : 'AI-Algorithms-Graph-Components-Nodes',
1412
#package : 'AI-Algorithms-Graph-Components',
1513
#tag : 'Nodes'
1614
}
1715

18-
{ #category : 'accessing' }
19-
AIDFSNode >> discoveryTime [
20-
21-
^ discoveryTime
22-
]
23-
24-
{ #category : 'accessing' }
25-
AIDFSNode >> discoveryTime: anInteger [
26-
27-
discoveryTime := anInteger
28-
]
29-
30-
{ #category : 'accessing' }
31-
AIDFSNode >> finishTime [
32-
33-
^ finishTime
34-
]
35-
36-
{ #category : 'accessing' }
37-
AIDFSNode >> finishTime: anInteger [
38-
39-
finishTime := anInteger
40-
]
41-
4216
{ #category : 'initialization' }
4317
AIDFSNode >> initialize [
4418

4519
super initialize.
4620
visited := false.
47-
discoveryTime := 0.
48-
finishTime := 0
4921
]
5022

5123
{ #category : 'accessing' }

src/AI-Algorithms-Graph-Tests/AIDFSTest.class.st

+98-189
Original file line numberDiff line numberDiff line change
@@ -24,211 +24,120 @@ AIDFSTest >> setUp [
2424
AIDFSTest >> testAseCircuitGraph [
2525

2626
"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.
7957
]
8058

8159
{ #category : 'tests' }
8260
AIDFSTest >> testComplexCycleGraph [
8361

8462
"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.
13085
]
13186

13287
{ #category : 'tests' }
13388
AIDFSTest >> testSimpleGraph [
13489

13590
"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.
171112
]
172113

173114
{ #category : 'tests' }
174115
AIDFSTest >> testWithoutCyclesMediumGraph [
175116

176117
"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.
234143
]

0 commit comments

Comments
 (0)