Skip to content

Commit 37a7d90

Browse files
committed
dag benchmark
1 parent 1b45b74 commit 37a7d90

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

dag/dag_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,63 @@ func TestAcyclicGraphWalk_error(t *testing.T) {
335335

336336
}
337337

338+
func BenchmarkDAG(b *testing.B) {
339+
for i := 0; i < b.N; i++ {
340+
count := 150
341+
b.StopTimer()
342+
g := &AcyclicGraph{}
343+
344+
// create 4 layers of fully connected nodes
345+
// layer A
346+
for i := 0; i < count; i++ {
347+
g.Add(fmt.Sprintf("A%d", i))
348+
}
349+
350+
// layer B
351+
for i := 0; i < count; i++ {
352+
B := fmt.Sprintf("B%d", i)
353+
g.Add(fmt.Sprintf(B))
354+
for j := 0; j < count; j++ {
355+
g.Connect(BasicEdge(B, fmt.Sprintf("A%d", j)))
356+
}
357+
}
358+
359+
// layer C
360+
for i := 0; i < count; i++ {
361+
c := fmt.Sprintf("C%d", i)
362+
g.Add(fmt.Sprintf(c))
363+
for j := 0; j < count; j++ {
364+
// connect them to previous layers so we have something that requires reduction
365+
g.Connect(BasicEdge(c, fmt.Sprintf("A%d", j)))
366+
g.Connect(BasicEdge(c, fmt.Sprintf("B%d", j)))
367+
}
368+
}
369+
370+
// layer D
371+
for i := 0; i < count; i++ {
372+
d := fmt.Sprintf("D%d", i)
373+
g.Add(fmt.Sprintf(d))
374+
for j := 0; j < count; j++ {
375+
g.Connect(BasicEdge(d, fmt.Sprintf("A%d", j)))
376+
g.Connect(BasicEdge(d, fmt.Sprintf("B%d", j)))
377+
g.Connect(BasicEdge(d, fmt.Sprintf("C%d", j)))
378+
}
379+
}
380+
381+
b.StartTimer()
382+
// Find dependencies for every node
383+
for _, v := range g.Vertices() {
384+
_, err := g.Ancestors(v)
385+
if err != nil {
386+
b.Fatal(err)
387+
}
388+
}
389+
390+
// reduce the final graph
391+
g.TransitiveReduction()
392+
}
393+
}
394+
338395
func TestAcyclicGraph_ReverseDepthFirstWalk_WithRemoval(t *testing.T) {
339396
var g AcyclicGraph
340397
g.Add(1)

0 commit comments

Comments
 (0)