dag benchmark
This commit is contained in:
parent
1b45b744c3
commit
37a7d904aa
|
@ -335,6 +335,63 @@ func TestAcyclicGraphWalk_error(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkDAG(b *testing.B) {
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
count := 150
|
||||||
|
b.StopTimer()
|
||||||
|
g := &AcyclicGraph{}
|
||||||
|
|
||||||
|
// create 4 layers of fully connected nodes
|
||||||
|
// layer A
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
g.Add(fmt.Sprintf("A%d", i))
|
||||||
|
}
|
||||||
|
|
||||||
|
// layer B
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
B := fmt.Sprintf("B%d", i)
|
||||||
|
g.Add(fmt.Sprintf(B))
|
||||||
|
for j := 0; j < count; j++ {
|
||||||
|
g.Connect(BasicEdge(B, fmt.Sprintf("A%d", j)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// layer C
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
c := fmt.Sprintf("C%d", i)
|
||||||
|
g.Add(fmt.Sprintf(c))
|
||||||
|
for j := 0; j < count; j++ {
|
||||||
|
// connect them to previous layers so we have something that requires reduction
|
||||||
|
g.Connect(BasicEdge(c, fmt.Sprintf("A%d", j)))
|
||||||
|
g.Connect(BasicEdge(c, fmt.Sprintf("B%d", j)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// layer D
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
d := fmt.Sprintf("D%d", i)
|
||||||
|
g.Add(fmt.Sprintf(d))
|
||||||
|
for j := 0; j < count; j++ {
|
||||||
|
g.Connect(BasicEdge(d, fmt.Sprintf("A%d", j)))
|
||||||
|
g.Connect(BasicEdge(d, fmt.Sprintf("B%d", j)))
|
||||||
|
g.Connect(BasicEdge(d, fmt.Sprintf("C%d", j)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.StartTimer()
|
||||||
|
// Find dependencies for every node
|
||||||
|
for _, v := range g.Vertices() {
|
||||||
|
_, err := g.Ancestors(v)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// reduce the final graph
|
||||||
|
g.TransitiveReduction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAcyclicGraph_ReverseDepthFirstWalk_WithRemoval(t *testing.T) {
|
func TestAcyclicGraph_ReverseDepthFirstWalk_WithRemoval(t *testing.T) {
|
||||||
var g AcyclicGraph
|
var g AcyclicGraph
|
||||||
g.Add(1)
|
g.Add(1)
|
||||||
|
|
Loading…
Reference in New Issue