Skip to content

Commit d01b0b0

Browse files
committed
Remove intermittent failure from newEdge test
Because the vertex visit was record after the Update call, Updated vertices may have been visited before the visit was recorded, causing occasional test failures. The order is now deterministic, and we can remove the brute-force loop.
1 parent 7bf33c2 commit d01b0b0

1 file changed

Lines changed: 29 additions & 30 deletions

File tree

‎dag/walk_test.go‎

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -175,43 +175,42 @@ func TestWalker_removeVertex(t *testing.T) {
175175
}
176176

177177
func TestWalker_newEdge(t *testing.T) {
178-
// Run it a bunch of times since it is timing dependent
179-
for i := 0; i < 50; i++ {
180-
var g AcyclicGraph
181-
g.Add(1)
182-
g.Add(2)
183-
g.Connect(BasicEdge(1, 2))
178+
var g AcyclicGraph
179+
g.Add(1)
180+
g.Add(2)
181+
g.Connect(BasicEdge(1, 2))
184182

185-
// Record function
186-
var order []interface{}
187-
recordF := walkCbRecord(&order)
183+
// Record function
184+
var order []interface{}
185+
recordF := walkCbRecord(&order)
188186

189-
// Build a callback that delays until we close a channel
190-
var w *Walker
191-
cb := func(v Vertex) error {
192-
if v == 1 {
193-
g.Add(3)
194-
g.Connect(BasicEdge(3, 2))
195-
w.Update(&g)
196-
}
187+
var w *Walker
188+
cb := func(v Vertex) error {
189+
// record where we are first, otherwise the Updated vertex may get
190+
// walked before the first visit.
191+
err := recordF(v)
197192

198-
return recordF(v)
193+
if v == 1 {
194+
g.Add(3)
195+
g.Connect(BasicEdge(3, 2))
196+
w.Update(&g)
199197
}
198+
return err
199+
}
200200

201-
// Add the initial vertices
202-
w = &Walker{Callback: cb}
203-
w.Update(&g)
201+
// Add the initial vertices
202+
w = &Walker{Callback: cb}
203+
w.Update(&g)
204204

205-
// Wait
206-
if err := w.Wait(); err != nil {
207-
t.Fatalf("err: %s", err)
208-
}
205+
// Wait
206+
if err := w.Wait(); err != nil {
207+
t.Fatalf("err: %s", err)
208+
}
209209

210-
// Check
211-
expected := []interface{}{1, 3, 2}
212-
if !reflect.DeepEqual(order, expected) {
213-
t.Fatalf("bad: %#v", order)
214-
}
210+
// Check
211+
expected := []interface{}{1, 3, 2}
212+
if !reflect.DeepEqual(order, expected) {
213+
t.Fatalf("bad: %#v", order)
215214
}
216215
}
217216

0 commit comments

Comments
 (0)