forked from hashicorp/terraform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtarjan_test.go
82 lines (70 loc) · 1.4 KB
/
tarjan_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
package digraph
import (
"reflect"
"sort"
"testing"
)
func TestStronglyConnectedComponents(t *testing.T) {
nodes := ParseBasic(`a -> b
a -> c
b -> c
c -> b
c -> d
d -> e`)
var nlist []Node
for _, n := range nodes {
nlist = append(nlist, n)
}
sccs := StronglyConnectedComponents(nlist, false)
if len(sccs) != 4 {
t.Fatalf("bad: %v", sccs)
}
sccs = StronglyConnectedComponents(nlist, true)
if len(sccs) != 1 {
t.Fatalf("bad: %v", sccs)
}
cycle := sccs[0]
if len(cycle) != 2 {
t.Fatalf("bad: %v", sccs)
}
cycleNodes := make([]string, len(cycle))
for i, c := range cycle {
cycleNodes[i] = c.(*BasicNode).Name
}
sort.Strings(cycleNodes)
expected := []string{"b", "c"}
if !reflect.DeepEqual(cycleNodes, expected) {
t.Fatalf("bad: %#v", cycleNodes)
}
}
func TestStronglyConnectedComponents2(t *testing.T) {
nodes := ParseBasic(`a -> b
a -> c
b -> d
b -> e
c -> f
c -> g
g -> a
`)
var nlist []Node
for _, n := range nodes {
nlist = append(nlist, n)
}
sccs := StronglyConnectedComponents(nlist, true)
if len(sccs) != 1 {
t.Fatalf("bad: %v", sccs)
}
cycle := sccs[0]
if len(cycle) != 3 {
t.Fatalf("bad: %v", sccs)
}
cycleNodes := make([]string, len(cycle))
for i, c := range cycle {
cycleNodes[i] = c.(*BasicNode).Name
}
sort.Strings(cycleNodes)
expected := []string{"a", "c", "g"}
if !reflect.DeepEqual(cycleNodes, expected) {
t.Fatalf("bad: %#v", cycleNodes)
}
}