1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
package build
import (
"fmt"
"strconv"
"testing"
)
func TestAdd(t *testing.T) {
res := Empty(0).Add(AllEdges())
exp := "0 []"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Add %s", mess)
}
Consistent("Add", t, res)
res = Grid(2, 2).Add(EdgeSet{
Cost: Cost(4),
})
exp = "4 [{0 1} {0 2} {0 3}:4 {1 2}:4 {1 3} {2 3}]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Add %s", mess)
}
Consistent("Add", t, res)
for m := 0; m < 5; m++ {
for n := 0; n < 5; n++ {
res = Kn(m).Add(AllEdges())
mess := fmt.Sprintf("Kn(%d).Add(AllEdges())", m)
Consistent(mess, t, res)
res = Kn(m).Add(NoEdges())
mess = fmt.Sprintf("Kn(%d).Add(NoEdges())", m)
Consistent(mess, t, res)
res = Grid(m, n).Add(EdgeSet{
From: Vertex(m),
To: Vertex(n),
Cost: Cost(3),
})
mess = fmt.Sprintf("Grid(%d,%d).Add(Edge(%d, %d, 3))", m, n, m, n)
Consistent(mess, t, res)
}
}
}
func TestDelete(t *testing.T) {
res := Kn(4).Delete(EdgeSet{From: Vertex(1)})
exp := "4 [{0 2} {0 3} {2 3}]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Delete %s", mess)
}
Consistent("Delete1", t, res)
res = Kn(0).Delete(EdgeSet{From: Vertex(1)})
exp = "0 []"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Delete %s", mess)
}
Consistent("Delete2", t, res)
res = Kn(4).AddCost(8).Delete(EdgeSet{From: Vertex(1)})
exp = "4 [{0 2}:8 {0 3}:8 {2 3}:8]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Delete %s", mess)
}
Consistent("Delete3", t, res)
res = Kn(4).Delete(AllEdges())
exp = "4 []"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Delete %s", mess)
}
Consistent("Delete4", t, res)
res = Grid(2, 2).Delete(Edge(2, 3))
exp = "4 [{0 1} {0 2} {1 3}]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("Delete %s", mess)
}
Consistent("Delete5", t, res)
for m := 0; m < 5; m++ {
for n := 0; n < 5; n++ {
res = Kn(m).Delete(AllEdges())
mess := fmt.Sprintf("Kn(%d).Delete(AllEdges())", m)
Consistent(mess, t, res)
res = Kn(m).Delete(NoEdges())
mess = fmt.Sprintf("Kn(%d).Delete(NoEdges())", m)
Consistent(mess, t, res)
res = Grid(m, n).Delete(EdgeSet{
From: Vertex(m),
To: Vertex(n),
Cost: Cost(3),
})
mess = fmt.Sprintf("Grid(%d,%d).Delete(Edge(%d, %d, 3))", m, n, m, n)
Consistent(mess, t, res)
}
}
}
func TestNewEdges(t *testing.T) {
res := newEdges(0, AllEdges())
exp := "0 []"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges1", t, res)
res = newEdges(3, Edge(1, 2))
exp = "3 [{1 2}]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges2", t, res)
res = newEdges(3, Edge(1, 1))
exp = "3 []"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges3", t, res)
res = newEdges(4, EdgeSet{
From: Vertex(1),
To: Vertex(2),
Cost: Cost(3),
})
exp = "4 [{1 2}:3]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges4", t, res)
res = newEdges(3, EdgeSet{})
exp = "3 [{0 1} {0 2} {1 2}]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges5", t, res)
res = newEdges(4, EdgeSet{
From: Range(0, 3),
To: Range(1, 4),
Keep: func(v, w int) bool { return v <= w },
})
exp = "4 [(0 1) (0 2) (0 3) (1 2) (1 3) (2 3)]"
if mess, diff := diff(res.String(), exp); diff {
t.Errorf("newEdges %s", mess)
}
Consistent("newEdges6", t, res)
for m := 0; m < 8; m++ {
for n := 0; n < 8; n++ {
res = newEdges(m+n, EdgeSet{
From: Range(m-n, m+n-3),
To: Range(n-m+4, m+n+2),
Keep: func(v, w int) bool { return true },
Cost: func(v, w int) int64 { return int64(10*v + w) },
})
mess := "newEdges(" + strconv.Itoa(m) + "," + strconv.Itoa(n) + ")"
Consistent(mess, t, res)
}
}
}
|