k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/third_party/forked/gonum/graph/simple/edgeholder_test.go (about) 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 // Empty tests 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 // Insert an edge to ourselves 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 // Insert edges from us to other nodes 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 // Insert edges to us to other nodes 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 // Make the transition to a map 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) // sort, map order is random 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 }