8 // Test data is located in triedata_test.go; generated by maketesttables.
9 var testdata = testdataTrie
11 type rangeTest struct {
19 var range1Off = []uint16{0, 2}
20 var range1 = []valueRange{
28 var rangeTests = []rangeTest{
29 {10, 0x80, 1, range1, range1Off},
30 {10, 0x00, 0, range1, range1Off},
31 {11, 0x80, 1, range1, range1Off},
32 {11, 0xff, 9, range1, range1Off},
33 {11, 0x00, 0, range1, range1Off},
36 func TestLookupSparse(t *testing.T) {
37 for i, test := range rangeTests {
38 n := trie{sparse: test.table, sparseOffset: test.offsets, cutoff: 10}
39 v := n.lookupValue(test.block, test.lookup)
41 t.Errorf("LookupSparse:%d: found %X; want %X", i, v, test.result)
46 // Test cases for illegal runes.
47 type trietest struct {
52 var tests = []trietest{
56 {1, []byte{t2, tx - 1}},
58 {2, []byte{t3, tx, tx - 1}},
59 {2, []byte{t3, tx, t2}},
60 {1, []byte{t3, tx - 1, tx}},
61 {3, []byte{t4, tx, tx, tx - 1}},
62 {3, []byte{t4, tx, tx, t2}},
63 {1, []byte{t4, t2, tx, tx - 1}},
64 {2, []byte{t4, tx, t2, tx - 1}},
69 {0, []byte{t4, tx, tx}},
71 // we only support UTF-8 up to utf8.UTFMax bytes (4 bytes)
72 {1, []byte{t5, tx, tx, tx, tx}},
73 {1, []byte{t6, tx, tx, tx, tx, tx}},
76 func mkUtf8(rune int) ([]byte, int) {
77 var b [utf8.UTFMax]byte
78 sz := utf8.EncodeRune(b[:], rune)
82 func TestLookup(t *testing.T) {
83 for i, tt := range testRunes {
85 v, szt := testdata.lookup(b)
87 t.Errorf("lookup(%U): found value %#x, expected %#x", tt, v, i)
90 t.Errorf("lookup(%U): found size %d, expected %d", tt, szt, szg)
93 for i, tt := range tests {
94 v, sz := testdata.lookup(tt.bytes)
96 t.Errorf("lookup of illegal rune, case %d: found value %#x, expected 0", i, v)
99 t.Errorf("lookup of illegal rune, case %d: found size %d, expected %d", i, sz, tt.size)
104 func TestLookupUnsafe(t *testing.T) {
105 for i, tt := range testRunes {
107 v := testdata.lookupUnsafe(b)
109 t.Errorf("lookupUnsafe(%U): found value %#x, expected %#x", i, v, i)
114 func TestLookupString(t *testing.T) {
115 for i, tt := range testRunes {
117 v, szt := testdata.lookupString(string(b))
119 t.Errorf("lookup(%U): found value %#x, expected %#x", i, v, i)
122 t.Errorf("lookup(%U): found size %d, expected %d", i, szt, szg)
125 for i, tt := range tests {
126 v, sz := testdata.lookupString(string(tt.bytes))
128 t.Errorf("lookup of illegal rune, case %d: found value %#x, expected 0", i, v)
131 t.Errorf("lookup of illegal rune, case %d: found size %d, expected %d", i, sz, tt.size)
136 func TestLookupStringUnsafe(t *testing.T) {
137 for i, tt := range testRunes {
139 v := testdata.lookupStringUnsafe(string(b))
141 t.Errorf("lookupUnsafe(%U): found value %#x, expected %#x", i, v, i)