-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathgraph_test.go
93 lines (88 loc) · 1.77 KB
/
graph_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
/*
Copyright 2016 The gta AUTHORS. All rights reserved.
Use of this source code is governed by the Apache 2 license that can be found
in the LICENSE file.
*/
package gta
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func TestGraphTraversal(t *testing.T) {
tests := []struct {
graph *Graph
start string
want map[string]bool
comment string
}{
{
comment: "A depends on B depends on C, C is dirty, so we expect all of them to be marked",
graph: &Graph{
graph: map[string]map[string]bool{
"C": map[string]bool{
"B": true,
},
"B": map[string]bool{
"A": true,
},
},
},
start: "C",
want: map[string]bool{
"A": true,
"B": true,
"C": true,
},
},
{
comment: "A depends on B depends on C, B is dirty, so we expect just A and B, and NOT C to be marked",
graph: &Graph{
graph: map[string]map[string]bool{
"C": map[string]bool{
"B": true,
},
"B": map[string]bool{
"A": true,
},
},
},
start: "B",
want: map[string]bool{
"A": true,
"B": true,
},
},
{
comment: "A depends on B depends on C depends on D, E depends on C, C and E dirty, so we expect all of them to be marked but D",
graph: &Graph{
graph: map[string]map[string]bool{
"D": map[string]bool{
"C": true,
},
"C": map[string]bool{
"B": true,
"E": true,
},
"B": map[string]bool{
"A": true,
},
},
},
start: "C",
want: map[string]bool{
"A": true,
"B": true,
"C": true,
"E": true,
},
},
}
for _, tt := range tests {
t.Log(tt.comment)
got := map[string]bool{}
tt.graph.Traverse(tt.start, got)
if diff := cmp.Diff(tt.want, got); diff != "" {
t.Errorf("(-want, +got)\n%s", diff)
}
}
}