...

Source file src/k8s.io/kubernetes/third_party/forked/gonum/graph/simple/edgeholder_test.go

Documentation: k8s.io/kubernetes/third_party/forked/gonum/graph/simple

     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  }
   105  

View as plain text