1 package simple
2
3 import (
4 "reflect"
5 "sort"
6 "testing"
7
8 "k8s.io/kubernetes/third_party/forked/gonum/graph"
9 )
10
11 func TestEdgeHolder(t *testing.T) {
12 holder := edgeHolder(&sliceEdgeHolder{self: 1})
13
14
15 if len := holder.Len(); len != 0 {
16 t.Errorf("expected 0")
17 }
18 if n, ok := holder.Get(2); ok || n != nil {
19 t.Errorf("expected nil,false")
20 }
21 holder.Visit(func(_ int, _ graph.Edge) { t.Errorf("unexpected call to visitor") })
22 holder = holder.Delete(2)
23
24
25 holder = holder.Set(1, Edge{F: Node(1), T: Node(1)})
26 if len := holder.Len(); len != 1 {
27 t.Errorf("expected 1")
28 }
29 if n, ok := holder.Get(1); !ok || n == nil || n.From().ID() != 1 || n.To().ID() != 1 {
30 t.Errorf("expected edge to ourselves, got %#v", n)
31 }
32 neighbors := []int{}
33 holder.Visit(func(neighbor int, _ graph.Edge) { neighbors = append(neighbors, neighbor) })
34 if !reflect.DeepEqual(neighbors, []int{1}) {
35 t.Errorf("expected a single visit to ourselves, got %v", neighbors)
36 }
37
38
39 holder = holder.Set(2, Edge{F: Node(1), T: Node(2)})
40 holder = holder.Set(3, Edge{F: Node(1), T: Node(3)})
41 holder = holder.Set(4, Edge{F: Node(1), T: Node(4)})
42 if len := holder.Len(); len != 4 {
43 t.Errorf("expected 4")
44 }
45 if n, ok := holder.Get(2); !ok || n == nil || n.From().ID() != 1 || n.To().ID() != 2 {
46 t.Errorf("expected edge from us to another node, got %#v", n)
47 }
48 neighbors = []int{}
49 holder.Visit(func(neighbor int, _ graph.Edge) { neighbors = append(neighbors, neighbor) })
50 if !reflect.DeepEqual(neighbors, []int{1, 2, 3, 4}) {
51 t.Errorf("expected a single visit to ourselves, got %v", neighbors)
52 }
53
54
55 holder = holder.Set(2, Edge{F: Node(2), T: Node(1)})
56 holder = holder.Set(3, Edge{F: Node(3), T: Node(1)})
57 holder = holder.Set(4, Edge{F: Node(4), T: Node(1)})
58 if len := holder.Len(); len != 4 {
59 t.Errorf("expected 4")
60 }
61 if n, ok := holder.Get(2); !ok || n == nil || n.From().ID() != 2 || n.To().ID() != 1 {
62 t.Errorf("expected reversed edge, got %#v", n)
63 }
64 neighbors = []int{}
65 holder.Visit(func(neighbor int, _ graph.Edge) { neighbors = append(neighbors, neighbor) })
66 if !reflect.DeepEqual(neighbors, []int{1, 2, 3, 4}) {
67 t.Errorf("expected a single visit to ourselves, got %v", neighbors)
68 }
69
70 if _, ok := holder.(*sliceEdgeHolder); !ok {
71 t.Errorf("expected slice edge holder")
72 }
73
74
75 holder = holder.Set(5, Edge{F: Node(5), T: Node(1)})
76
77 if _, ok := holder.(mapEdgeHolder); !ok {
78 t.Errorf("expected map edge holder")
79 }
80 if len := holder.Len(); len != 5 {
81 t.Errorf("expected 5")
82 }
83 if n, ok := holder.Get(2); !ok || n == nil || n.From().ID() != 2 || n.To().ID() != 1 {
84 t.Errorf("expected old edges, got %#v", n)
85 }
86 if n, ok := holder.Get(5); !ok || n == nil || n.From().ID() != 5 || n.To().ID() != 1 {
87 t.Errorf("expected new edge, got %#v", n)
88 }
89 neighbors = []int{}
90 holder.Visit(func(neighbor int, _ graph.Edge) { neighbors = append(neighbors, neighbor) })
91 sort.Ints(neighbors)
92 if !reflect.DeepEqual(neighbors, []int{1, 2, 3, 4, 5}) {
93 t.Errorf("expected 1,2,3,4,5, got %v", neighbors)
94 }
95 holder = holder.Delete(1)
96 holder = holder.Delete(2)
97 holder = holder.Delete(3)
98 holder = holder.Delete(4)
99 holder = holder.Delete(5)
100 holder = holder.Delete(6)
101 if len := holder.Len(); len != 0 {
102 t.Errorf("expected 0")
103 }
104 }
105
View as plain text