all: make tests pass when -count is greater than 1

Tests run repeatedly do not reinitialise state, meaning that a second run
of the tests will have leftover state from the previous run. This ensures
that repeated runs are identical with the exception of map iteration order.
This commit is contained in:
Dan Kortschak
2022-08-06 10:16:11 +09:30
parent aedb59a6f6
commit a4dda6a99c
6 changed files with 769 additions and 766 deletions

View File

@@ -21,48 +21,48 @@ import (
// weightedlines
// empty
var nodesOfTests = []struct {
name string
nodes graph.Nodes
want []graph.Node
}{
{
name: "nil",
nodes: nil,
want: nil,
},
{
name: "empty",
nodes: graph.Empty,
want: nil,
},
{
name: "no nodes",
nodes: iterator.NewOrderedNodes(nil),
want: nil,
},
{
name: "implicit nodes",
nodes: iterator.NewImplicitNodes(-1, 4, func(id int) graph.Node { return simple.Node(id) }),
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
{
name: "no slice method",
nodes: basicNodes{iterator.NewOrderedNodes([]graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)})},
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
{
name: "explicit nodes",
nodes: iterator.NewOrderedNodes([]graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)}),
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
}
type basicNodes struct {
graph.Nodes
}
func TestNodesOf(t *testing.T) {
nodesOfTests := []struct {
name string
nodes graph.Nodes
want []graph.Node
}{
{
name: "nil",
nodes: nil,
want: nil,
},
{
name: "empty",
nodes: graph.Empty,
want: nil,
},
{
name: "no nodes",
nodes: iterator.NewOrderedNodes(nil),
want: nil,
},
{
name: "implicit nodes",
nodes: iterator.NewImplicitNodes(-1, 4, func(id int) graph.Node { return simple.Node(id) }),
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
{
name: "no slice method",
nodes: basicNodes{iterator.NewOrderedNodes([]graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)})},
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
{
name: "explicit nodes",
nodes: iterator.NewOrderedNodes([]graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)}),
want: []graph.Node{simple.Node(-1), simple.Node(0), simple.Node(1), simple.Node(2), simple.Node(3)},
},
}
for _, test := range nodesOfTests {
got := graph.NodesOf(test.nodes)
if !reflect.DeepEqual(got, test.want) {
@@ -71,59 +71,59 @@ func TestNodesOf(t *testing.T) {
}
}
var edgesOfTests = []struct {
name string
edges graph.Edges
want []graph.Edge
}{
{
name: "nil",
edges: nil,
want: nil,
},
{
name: "empty",
edges: graph.Empty,
want: nil,
},
{
name: "no edges",
edges: iterator.NewOrderedEdges(nil),
want: nil,
},
{
name: "no slice method",
edges: basicEdges{iterator.NewOrderedEdges([]graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
})},
want: []graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
},
},
{
name: "explicit edges",
edges: iterator.NewOrderedEdges([]graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
}),
want: []graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
},
},
}
type basicEdges struct {
graph.Edges
}
func TestEdgesOf(t *testing.T) {
edgesOfTests := []struct {
name string
edges graph.Edges
want []graph.Edge
}{
{
name: "nil",
edges: nil,
want: nil,
},
{
name: "empty",
edges: graph.Empty,
want: nil,
},
{
name: "no edges",
edges: iterator.NewOrderedEdges(nil),
want: nil,
},
{
name: "no slice method",
edges: basicEdges{iterator.NewOrderedEdges([]graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
})},
want: []graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
},
},
{
name: "explicit edges",
edges: iterator.NewOrderedEdges([]graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
}),
want: []graph.Edge{
simple.Edge{F: simple.Node(-1), T: simple.Node(0)},
simple.Edge{F: simple.Node(1), T: simple.Node(2)},
simple.Edge{F: simple.Node(3), T: simple.Node(4)},
},
},
}
for _, test := range edgesOfTests {
got := graph.EdgesOf(test.edges)
if !reflect.DeepEqual(got, test.want) {
@@ -132,59 +132,59 @@ func TestEdgesOf(t *testing.T) {
}
}
var weightedEdgesOfTests = []struct {
name string
edges graph.WeightedEdges
want []graph.WeightedEdge
}{
{
name: "nil",
edges: nil,
want: nil,
},
{
name: "empty",
edges: graph.Empty,
want: nil,
},
{
name: "no edges",
edges: iterator.NewOrderedWeightedEdges(nil),
want: nil,
},
{
name: "no slice method",
edges: basicWeightedEdges{iterator.NewOrderedWeightedEdges([]graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
})},
want: []graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
},
},
{
name: "explicit edges",
edges: iterator.NewOrderedWeightedEdges([]graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
}),
want: []graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
},
},
}
type basicWeightedEdges struct {
graph.WeightedEdges
}
func TestWeightedEdgesOf(t *testing.T) {
weightedEdgesOfTests := []struct {
name string
edges graph.WeightedEdges
want []graph.WeightedEdge
}{
{
name: "nil",
edges: nil,
want: nil,
},
{
name: "empty",
edges: graph.Empty,
want: nil,
},
{
name: "no edges",
edges: iterator.NewOrderedWeightedEdges(nil),
want: nil,
},
{
name: "no slice method",
edges: basicWeightedEdges{iterator.NewOrderedWeightedEdges([]graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
})},
want: []graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
},
},
{
name: "explicit edges",
edges: iterator.NewOrderedWeightedEdges([]graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
}),
want: []graph.WeightedEdge{
simple.WeightedEdge{F: simple.Node(-1), T: simple.Node(0), W: 1},
simple.WeightedEdge{F: simple.Node(1), T: simple.Node(2), W: 2},
simple.WeightedEdge{F: simple.Node(3), T: simple.Node(4), W: 3},
},
},
}
for _, test := range weightedEdgesOfTests {
got := graph.WeightedEdgesOf(test.edges)
if !reflect.DeepEqual(got, test.want) {
@@ -193,59 +193,59 @@ func TestWeightedEdgesOf(t *testing.T) {
}
}
var linesOfTests = []struct {
name string
lines graph.Lines
want []graph.Line
}{
{
name: "nil",
lines: nil,
want: nil,
},
{
name: "empty",
lines: graph.Empty,
want: nil,
},
{
name: "no edges",
lines: iterator.NewOrderedLines(nil),
want: nil,
},
{
name: "no slice method",
lines: basicLines{iterator.NewOrderedLines([]graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
})},
want: []graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
},
},
{
name: "explicit edges",
lines: iterator.NewOrderedLines([]graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
}),
want: []graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
},
},
}
type basicLines struct {
graph.Lines
}
func TestLinesOf(t *testing.T) {
linesOfTests := []struct {
name string
lines graph.Lines
want []graph.Line
}{
{
name: "nil",
lines: nil,
want: nil,
},
{
name: "empty",
lines: graph.Empty,
want: nil,
},
{
name: "no edges",
lines: iterator.NewOrderedLines(nil),
want: nil,
},
{
name: "no slice method",
lines: basicLines{iterator.NewOrderedLines([]graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
})},
want: []graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
},
},
{
name: "explicit edges",
lines: iterator.NewOrderedLines([]graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
}),
want: []graph.Line{
multi.Line{F: multi.Node(-1), T: multi.Node(0), UID: -1},
multi.Line{F: multi.Node(1), T: multi.Node(2), UID: 0},
multi.Line{F: multi.Node(3), T: multi.Node(4), UID: 1},
},
},
}
for _, test := range linesOfTests {
got := graph.LinesOf(test.lines)
if !reflect.DeepEqual(got, test.want) {
@@ -254,59 +254,59 @@ func TestLinesOf(t *testing.T) {
}
}
var weightedLinesOfTests = []struct {
name string
lines graph.WeightedLines
want []graph.WeightedLine
}{
{
name: "nil",
lines: nil,
want: nil,
},
{
name: "empty",
lines: graph.Empty,
want: nil,
},
{
name: "no edges",
lines: iterator.NewOrderedWeightedLines(nil),
want: nil,
},
{
name: "no slice method",
lines: basicWeightedLines{iterator.NewOrderedWeightedLines([]graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
})},
want: []graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
},
},
{
name: "explicit edges",
lines: iterator.NewOrderedWeightedLines([]graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
}),
want: []graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
},
},
}
type basicWeightedLines struct {
graph.WeightedLines
}
func TestWeightedLinesOf(t *testing.T) {
weightedLinesOfTests := []struct {
name string
lines graph.WeightedLines
want []graph.WeightedLine
}{
{
name: "nil",
lines: nil,
want: nil,
},
{
name: "empty",
lines: graph.Empty,
want: nil,
},
{
name: "no edges",
lines: iterator.NewOrderedWeightedLines(nil),
want: nil,
},
{
name: "no slice method",
lines: basicWeightedLines{iterator.NewOrderedWeightedLines([]graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
})},
want: []graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
},
},
{
name: "explicit edges",
lines: iterator.NewOrderedWeightedLines([]graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
}),
want: []graph.WeightedLine{
multi.WeightedLine{F: multi.Node(-1), T: multi.Node(0), W: 1, UID: -1},
multi.WeightedLine{F: multi.Node(1), T: multi.Node(2), W: 2, UID: 0},
multi.WeightedLine{F: multi.Node(3), T: multi.Node(4), W: 3, UID: 1},
},
},
}
for _, test := range weightedLinesOfTests {
got := graph.WeightedLinesOf(test.lines)
if !reflect.DeepEqual(got, test.want) {