Repository navigation
Expand file tree
/
Copy pathdag_test.go
More file actions
95 lines (87 loc) · 2.91 KB
/
Copy pathdag_test.go
File metadata and controls
95 lines (87 loc) · 2.91 KB
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
package seqflow
import (
"errors"
"testing"
)
func TestDAG_LinearPipeline(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {})},
{name: "B", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
{name: "C", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"B"}},
}
d, err := buildDAG(nodes)
if err != nil {
t.Fatalf("buildDAG 错误: %v", err)
}
if len(d.terminals) != 1 || d.terminals[0] != "C" {
t.Errorf("终端节点 = %v, 期望 [C]", d.terminals)
}
}
func TestDAG_Diamond(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {})},
{name: "B", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
{name: "C", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
{name: "D", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"B", "C"}},
}
d, err := buildDAG(nodes)
if err != nil {
t.Fatalf("buildDAG 错误: %v", err)
}
if len(d.terminals) != 1 || d.terminals[0] != "D" {
t.Errorf("终端节点 = %v, 期望 [D]", d.terminals)
}
}
func TestDAG_FanOut(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {})},
{name: "B", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
{name: "C", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
{name: "D", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
}
d, err := buildDAG(nodes)
if err != nil {
t.Fatalf("buildDAG 错误: %v", err)
}
if len(d.terminals) != 3 {
t.Errorf("终端节点数 = %d, 期望 3(B, C, D)", len(d.terminals))
}
}
func TestDAG_DuplicateName(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {})},
{name: "A", handler: handlerFunc(func(l, u int64) {})},
}
_, err := buildDAG(nodes)
if !errors.Is(err, ErrDuplicateHandler) {
t.Errorf("期望 ErrDuplicateHandler, 实际: %v", err)
}
}
func TestDAG_UnknownDependency(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"X"}},
}
_, err := buildDAG(nodes)
if !errors.Is(err, ErrUnknownDependency) {
t.Errorf("期望 ErrUnknownDependency, 实际: %v", err)
}
}
func TestDAG_CyclicDependency(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"B"}},
{name: "B", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
}
_, err := buildDAG(nodes)
if !errors.Is(err, ErrCyclicDependency) {
t.Errorf("期望 ErrCyclicDependency, 实际: %v", err)
}
}
func TestDAG_SelfDependency(t *testing.T) {
nodes := []handlerNode{
{name: "A", handler: handlerFunc(func(l, u int64) {}), dependsOn: []string{"A"}},
}
_, err := buildDAG(nodes)
if !errors.Is(err, ErrCyclicDependency) {
t.Errorf("期望 ErrCyclicDependency, 实际: %v", err)
}
}