7 "github.com/bradfitz/iter"
8 "github.com/stretchr/testify/assert"
11 func instanceSlice(i *Instance) (sl []int) {
12 for e := i.First(); e != nil; e = e.Next() {
13 sl = append(sl, e.Piece())
18 func sameContents(a, b []int) bool {
20 panic("y u pass different length slices")
22 sort.IntSlice(a).Sort()
23 sort.IntSlice(b).Sort()
32 func checkOrder(t testing.TB, i *Instance, ppp ...[]int) {
34 t.Fatalf("have %v, expected %v", instanceSlice(i), ppp)
37 for _, pp := range ppp {
39 for len(pp_) != len(pp) {
40 pp_ = append(pp_, e.Piece())
43 if !sameContents(pp, pp_) {
52 func testPieceOrdering(t testing.TB) {
54 assert.True(t, i.Empty())
56 assert.False(t, i.Empty())
58 checkOrder(t, i, []int{1, 0})
60 checkOrder(t, i, []int{0, 1})
62 checkOrder(t, i, []int{0})
65 checkOrder(t, i, []int{0})
67 assert.True(t, i.Empty())
70 assert.False(t, i.Empty())
73 checkOrder(t, i, []int{3, 1, 2})
74 // Move a piece that isn't the youngest in a key.
76 checkOrder(t, i, []int{1}, []int{3, 2})
80 assert.True(t, i.Empty())
82 // Deleting pieces that aren't present.
86 assert.True(t, i.Empty())
90 func TestPieceOrdering(t *testing.T) {
94 func BenchmarkPieceOrdering(b *testing.B) {
95 for range iter.N(b.N) {
100 func BenchmarkIteration(b *testing.B) {
101 for range iter.N(b.N) {
103 for p := range iter.N(500) {
106 for e := i.First(); e != nil; e = e.Next() {