-
Notifications
You must be signed in to change notification settings - Fork 0
/
internal_test.go
115 lines (92 loc) · 3.75 KB
/
internal_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package cerebro
import (
log "github.com/cihub/seelog"
// SPEW "github.com/davecgh/go-spew/spew"
"fmt"
. "github.com/smartystreets/goconvey/convey"
"github.com/vrecan/cerebro/graph"
"testing"
)
func TestDepthFirst(t *testing.T) {
defer log.Flush()
Convey("Add items with edges validate edges, multiple layers of relations", t, func() {
g := NewDirectedGraph(1)
g.SetEdge(Edge{F: Node("1"), T: Node("10"), W: 1})
g.SetEdge(Edge{F: Node("1"), T: Node("11"), W: 1})
g.SetEdge(Edge{F: Node("1"), T: Node("12"), W: 1})
g.SetEdge(Edge{F: Node("12"), T: Node("2"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("20"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("21"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("22"), W: 1})
g.SetEdge(Edge{F: Node("22"), T: Node("3"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("30"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("31"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("32"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("1"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("2"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("3"), W: 1})
r := Dependencies(*g, Node("1"))
So(len(r), ShouldEqual, 12)
for _, n := range r {
fmt.Println(n)
}
So(OrderValid(Node("10"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("11"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("12"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("2"), Node("12"), r), ShouldBeTrue)
So(OrderValid(Node("20"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("21"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("22"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("3"), Node("22"), r), ShouldBeTrue)
So(OrderValid(Node("30"), Node("3"), r), ShouldBeTrue)
So(OrderValid(Node("31"), Node("3"), r), ShouldBeTrue)
So(OrderValid(Node("32"), Node("3"), r), ShouldBeTrue)
})
Convey("Same graph but pluck out node 4", t, func() {
g := NewDirectedGraph(1)
g.SetEdge(Edge{F: Node("1"), T: Node("10"), W: 1})
g.SetEdge(Edge{F: Node("1"), T: Node("11"), W: 1})
g.SetEdge(Edge{F: Node("1"), T: Node("12"), W: 1})
g.SetEdge(Edge{F: Node("12"), T: Node("2"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("20"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("21"), W: 1})
g.SetEdge(Edge{F: Node("2"), T: Node("22"), W: 1})
g.SetEdge(Edge{F: Node("22"), T: Node("3"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("30"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("31"), W: 1})
g.SetEdge(Edge{F: Node("3"), T: Node("32"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("1"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("2"), W: 1})
g.SetEdge(Edge{F: Node("4"), T: Node("3"), W: 1})
r := Dependencies(*g, Node("4"))
So(len(r), ShouldEqual, 13)
for _, n := range r {
fmt.Println(n)
}
So(OrderValid(Node("10"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("11"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("12"), Node("1"), r), ShouldBeTrue)
So(OrderValid(Node("2"), Node("12"), r), ShouldBeTrue)
So(OrderValid(Node("20"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("21"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("22"), Node("2"), r), ShouldBeTrue)
So(OrderValid(Node("3"), Node("22"), r), ShouldBeTrue)
So(OrderValid(Node("30"), Node("3"), r), ShouldBeTrue)
So(OrderValid(Node("31"), Node("3"), r), ShouldBeTrue)
So(OrderValid(Node("32"), Node("3"), r), ShouldBeTrue)
So(OrderValid(Node("1"), Node("4"), r), ShouldBeTrue)
So(OrderValid(Node("2"), Node("4"), r), ShouldBeTrue)
So(OrderValid(Node("3"), Node("4"), r), ShouldBeTrue)
})
}
func OrderValid(first graph.Node, second graph.Node, r []graph.Node) bool {
for _, a := range r {
if a.ID() == first.ID() {
return true
}
if a.ID() == second.ID() {
return false
}
}
return false //doesn't exist
}