79 lines
1.4 KiB
Go
79 lines
1.4 KiB
Go
package pieceordering
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
func instanceSlice(i *Instance) (sl []int) {
|
|
for e := i.First(); e != nil; e = e.Next() {
|
|
sl = append(sl, e.Piece())
|
|
}
|
|
return
|
|
}
|
|
|
|
func sameContents(a, b []int) bool {
|
|
if len(a) != len(b) {
|
|
panic("y u pass different length slices")
|
|
}
|
|
sort.IntSlice(a).Sort()
|
|
sort.IntSlice(b).Sort()
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func checkOrder(t *testing.T, i *Instance, ppp ...[]int) {
|
|
fatal := func() {
|
|
t.Fatalf("have %v, expected %v", instanceSlice(i), ppp)
|
|
}
|
|
e := i.First()
|
|
for _, pp := range ppp {
|
|
var pp_ []int
|
|
for len(pp_) != len(pp) {
|
|
pp_ = append(pp_, e.Piece())
|
|
e = e.Next()
|
|
}
|
|
if !sameContents(pp, pp_) {
|
|
fatal()
|
|
}
|
|
}
|
|
if e != nil {
|
|
fatal()
|
|
}
|
|
}
|
|
|
|
func TestPieceOrdering(t *testing.T) {
|
|
i := New()
|
|
i.SetPiece(0, 1)
|
|
i.SetPiece(1, 0)
|
|
checkOrder(t, i, []int{1, 0})
|
|
i.SetPiece(1, 2)
|
|
checkOrder(t, i, []int{0, 1})
|
|
i.DeletePiece(1)
|
|
checkOrder(t, i, []int{0})
|
|
i.DeletePiece(2)
|
|
i.DeletePiece(1)
|
|
checkOrder(t, i, []int{0})
|
|
i.DeletePiece(0)
|
|
checkOrder(t, i, nil)
|
|
i.SetPiece(2, 1)
|
|
i.SetPiece(1, 1)
|
|
i.SetPiece(3, 1)
|
|
checkOrder(t, i, []int{3, 1, 2})
|
|
// Move a piece that isn't the youngest in a key.
|
|
i.SetPiece(1, -1)
|
|
checkOrder(t, i, []int{1}, []int{3, 2})
|
|
i.DeletePiece(2)
|
|
i.DeletePiece(3)
|
|
i.DeletePiece(1)
|
|
checkOrder(t, i, nil)
|
|
i.DeletePiece(2)
|
|
i.DeletePiece(3)
|
|
i.DeletePiece(1)
|
|
checkOrder(t, i, nil)
|
|
}
|