diff --git a/util/dijkstra/dijkstra.go b/util/dijkstra/dijkstra.go deleted file mode 100644 index 722a568343f9683de9cabd7f041bb617aee9fc06..0000000000000000000000000000000000000000 --- a/util/dijkstra/dijkstra.go +++ /dev/null @@ -1,91 +0,0 @@ -package dijkstra - -type Topology struct { - nodes []Node - edges map[Node]map[Node]int64 -} - -type Node struct { - Name string -} - -type Edge struct { - NodeA Node - NodeB Node - Distance int64 -} - -type SPT map[Node]Path - -type Path struct { - Edges []Edge - Distance int64 -} - -// NewTopologay creates a new topology -func NewTopologay(nodes []Node, edges []Edge) *Topology { - t := &Topology{ - nodes: nodes, - edges: make(map[Node]map[Node]int64), - } - - for _, e := range edges { - if _, ok := t.edges[e.NodeA]; !ok { - t.edges[e.NodeA] = make(map[Node]int64) - } - - t.edges[e.NodeA][e.NodeB] = e.Distance - } - - return t -} - -// SPT calculates the shortest path tree -func (t *Topology) SPT(from Node) *SPT { - spt := make(SPT) - - for _, n := range t.nodes { - spt[n] = Path{ - Edges: make([]Edge, 0), - Distance: -1, - } - } - - f := spt[from] - f.Distance = 0 - spt[from] = f - - baseDistance := int64(0) - for n, d := range t.edges[from] { - nPath := spt[n] - if nPath.Distance < 0 { - nPath.Distance = d - nPath.Edges = []Edge{ - { - NodeA: from, - NodeB: n, - Distance: d, - }, - } - - spt[n] = nPath - continue - } - - if spt[n].Distance < baseDistance+d { - continue - } - - nPath.Distance += d - nPath.Edges = []Edge{ - { - NodeA: from, - NodeB: n, - Distance: d, - }, - } - - } - - return &spt -} diff --git a/util/dijkstra/dijkstra_test.go b/util/dijkstra/dijkstra_test.go deleted file mode 100644 index 87ca0a88db4ca643e89f746c5aac49cadd3e8813..0000000000000000000000000000000000000000 --- a/util/dijkstra/dijkstra_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package dijkstra - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestSPT(t *testing.T) { - tests := []struct { - name string - nodes []Node - edges []Edge - expected *SPT - }{ - { - name: "Test #1", - nodes: []Node{ - { - Name: "A", - }, - { - Name: "B", - }, { - Name: "C", - }, { - Name: "D", - }, - }, - edges: []Edge{ - { - NodeA: Node{Name: "A"}, - NodeB: Node{Name: "B"}, - Distance: 1, - }, - { - NodeA: Node{Name: "B"}, - NodeB: Node{Name: "A"}, - Distance: 1, - }, - { - NodeA: Node{Name: "B"}, - NodeB: Node{Name: "C"}, - Distance: 5, - }, - { - NodeA: Node{Name: "C"}, - NodeB: Node{Name: "B"}, - Distance: 5, - }, - { - NodeA: Node{Name: "B"}, - NodeB: Node{Name: "D"}, - Distance: 1, - }, - { - NodeA: Node{Name: "D"}, - NodeB: Node{Name: "B"}, - Distance: 1, - }, - { - NodeA: Node{Name: "A"}, - NodeB: Node{Name: "D"}, - Distance: 5, - }, - { - NodeA: Node{Name: "D"}, - NodeB: Node{Name: "A"}, - Distance: 5, - }, - { - NodeA: Node{Name: "D"}, - NodeB: Node{Name: "C"}, - Distance: 5, - }, - { - NodeA: Node{Name: "C"}, - NodeB: Node{Name: "D"}, - Distance: 5, - }, - }, - expected: &SPT{ - Node{Name: "A"}: Path{ - Edges: []Edge{}, - Distance: 0, - }, - Node{Name: "B"}: Path{ - Edges: []Edge{ - { - NodeA: Node{Name: "A"}, - NodeB: Node{Name: "B"}, - Distance: 1, - }, - }, - Distance: 1, - }, - Node{Name: "C"}: Path{ - Edges: []Edge{ - { - NodeA: Node{Name: "A"}, - NodeB: Node{Name: "B"}, - Distance: 1, - }, - { - NodeA: Node{Name: "B"}, - NodeB: Node{Name: "D"}, - Distance: 1, - }, - { - NodeA: Node{Name: "D"}, - NodeB: Node{Name: "C"}, - Distance: 1, - }, - }, - Distance: 3, - }, - Node{Name: "D"}: Path{ - Edges: []Edge{ - { - NodeA: Node{Name: "A"}, - NodeB: Node{Name: "B"}, - Distance: 1, - }, - { - NodeA: Node{Name: "B"}, - NodeB: Node{Name: "D"}, - Distance: 1, - }, - }, - Distance: 2, - }, - }, - }, - } - - for _, test := range tests { - top := NewTopologay(test.nodes, test.edges) - spt := top.SPT(Node{Name: "A"}) - - assert.Equalf(t, test.expected, spt, "Test %q", test.name) - } -}