1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
12 "golang.org/x/text/internal/colltab"
15 var largetosmall = []stridx{
24 var offsetSortTests = [][]stridx{
36 func TestOffsetSort(t *testing.T) {
37 for i, st := range offsetSortTests {
38 sort.Sort(offsetSort(st))
39 for j, si := range st {
41 t.Errorf("%d: failed: %v", i, st)
45 for i, tt := range genStateTests {
46 // ensure input is well-formed
47 sort.Sort(offsetSort(tt.in))
48 for j, si := range tt.in {
50 t.Errorf("%dth sort failed: %v", i, tt.in)
56 var genidxtest1 = []stridx{
66 var genidxSortTests = [][]stridx{
71 func TestGenIdxSort(t *testing.T) {
72 for i, st := range genidxSortTests {
73 sort.Sort(genidxSort(st))
74 for j, si := range st {
76 t.Errorf("%dth sort failed %v", i, st)
83 var entrySortTests = []colltab.ContractTrieSet{
92 func TestEntrySort(t *testing.T) {
93 for i, et := range entrySortTests {
94 sort.Sort(entrySort(et))
95 for j, fe := range et {
97 t.Errorf("%dth sort failed %v", i, et)
104 type GenStateTest struct {
107 out colltab.ContractTrieSet
110 var genStateTests = []GenStateTest{
115 colltab.ContractTrieSet{
116 {'a', 0, 1, noIndex},
117 {'b', 0, 1, noIndex},
118 {'c', 'c', final, 1},
127 colltab.ContractTrieSet{
128 {'a', 0, 1, noIndex},
129 {'b', 0, 1, noIndex},
130 {'c', 'e', final, 1},
139 colltab.ContractTrieSet{
142 {'c', 'c', final, 1},
154 colltab.ContractTrieSet{
155 {'b', 'b', final, 6},
157 {'c', 'c', final, 4},
159 {'c', 'd', final, 1},
172 colltab.ContractTrieSet{
173 {'b', 3, 1, noIndex},
174 {'a', 0, 1, noIndex},
177 {'d', 'd', final, 1},
180 {'e', 'f', final, 2},
185 func TestGenStates(t *testing.T) {
186 for i, tt := range genStateTests {
188 for _, e := range tt.in {
191 // ensure input is well-formed
192 sort.Sort(genidxSort(si))
193 ct := colltab.ContractTrieSet{}
194 n, _ := genStates(&ct, si)
195 if nn := tt.firstBlockLen; nn != n {
196 t.Errorf("%d: block len %v; want %v", i, n, nn)
198 if lv, lw := len(ct), len(tt.out); lv != lw {
199 t.Errorf("%d: len %v; want %v", i, lv, lw)
202 for j, fe := range tt.out {
203 const msg = "%d:%d: value %s=%v; want %v"
205 t.Errorf(msg, i, j, "l", ct[j].L, fe.L)
208 t.Errorf(msg, i, j, "h", ct[j].H, fe.H)
211 t.Errorf(msg, i, j, "n", ct[j].N, fe.N)
214 t.Errorf(msg, i, j, "i", ct[j].I, fe.I)
220 func TestLookupContraction(t *testing.T) {
221 for i, tt := range genStateTests {
223 for _, e := range tt.in {
224 input = append(input, e.str)
226 cts := colltab.ContractTrieSet{}
227 h, _ := appendTrie(&cts, input)
228 for j, si := range tt.in {
230 for _, s := range []string{str, str + "X"} {
231 msg := "%d:%d: %s(%s) %v; want %v"
232 idx, sn := lookup(&cts, h, []byte(s))
234 t.Errorf(msg, i, j, "index", s, idx, si.index)
237 t.Errorf(msg, i, j, "sn", s, sn, len(str))
244 func TestPrintContractionTrieSet(t *testing.T) {
245 testdata := colltab.ContractTrieSet(genStateTests[4].out)
246 buf := &bytes.Buffer{}
247 print(&testdata, buf, "test")
248 if contractTrieOutput != buf.String() {
249 t.Errorf("output differs; found\n%s", buf.String())
250 println(string(buf.Bytes()))
254 const contractTrieOutput = `// testCTEntries: 8 entries, 32 bytes
255 var testCTEntries = [8]struct{L,H,N,I uint8}{
265 var testContractTrieSet = colltab.ContractTrieSet( testCTEntries[:] )