1
2
3
4
5
6
7 package main
8
9 import (
10 "fmt"
11 "testing"
12 )
13
14
15 type u []uint64
16 type uu [][]uint64
17
18 type SplitTest struct {
19 input u
20 output uu
21 signed bool
22 }
23
24 var (
25 m2 = uint64(2)
26 m1 = uint64(1)
27 m0 = uint64(0)
28 m_1 = ^uint64(0)
29 m_2 = ^uint64(0) - 1
30 )
31
32 var splitTests = []SplitTest{
33
34
35 {u{1}, uu{u{1}}, false},
36
37 {u{3, 2, 1}, uu{u{1, 2, 3}}, true},
38
39 {u{3, 2, 1}, uu{u{1, 2, 3}}, false},
40
41 {u{1, 33, 32, 31}, uu{u{1}, u{31, 32, 33}}, true},
42
43 {u{33, 7, 32, 31, 9, 8}, uu{u{7, 8, 9}, u{31, 32, 33}}, true},
44
45 {u{33, 44, 1, 32, 45, 31}, uu{u{1}, u{31, 32, 33}, u{44, 45}}, true},
46
47 {u{m1, m0, m_1, m2, m_2}, uu{u{m0, m1, m2}, u{m_2, m_1}}, false},
48
49 {u{m1, m0, m_1, m2, m_2}, uu{u{m_2, m_1, m0, m1, m2}}, true},
50 }
51
52 func TestSplitIntoRuns(t *testing.T) {
53 Outer:
54 for n, test := range splitTests {
55 values := make([]Value, len(test.input))
56 for i, v := range test.input {
57 values[i] = Value{"", "", v, test.signed, fmt.Sprint(v)}
58 }
59 runs := splitIntoRuns(values)
60 if len(runs) != len(test.output) {
61 t.Errorf("#%d: %v: got %d runs; expected %d", n, test.input, len(runs), len(test.output))
62 continue
63 }
64 for i, run := range runs {
65 if len(run) != len(test.output[i]) {
66 t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
67 continue Outer
68 }
69 for j, v := range run {
70 if v.value != test.output[i][j] {
71 t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
72 continue Outer
73 }
74 }
75 }
76 }
77 }
78
View as plain text