edgeholder_test.go 3.3 KB

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