| package norm |
| |
| import ( |
| "testing" |
| "utf8" |
| ) |
| |
| // Test data is located in triedata_test.go; generated by maketesttables. |
| var testdata = testdataTrie |
| |
| // Test cases for illegal runes. |
| type trietest struct { |
| size int |
| bytes []byte |
| } |
| |
| var tests = []trietest{ |
| // illegal runes |
| {1, []byte{0x80}}, |
| {1, []byte{0xFF}}, |
| {1, []byte{t2, tx - 1}}, |
| {1, []byte{t2, t2}}, |
| {2, []byte{t3, tx, tx - 1}}, |
| {2, []byte{t3, tx, t2}}, |
| {1, []byte{t3, tx - 1, tx}}, |
| {3, []byte{t4, tx, tx, tx - 1}}, |
| {3, []byte{t4, tx, tx, t2}}, |
| {1, []byte{t4, t2, tx, tx - 1}}, |
| {2, []byte{t4, tx, t2, tx - 1}}, |
| |
| // short runes |
| {0, []byte{t2}}, |
| {0, []byte{t3, tx}}, |
| {0, []byte{t4, tx, tx}}, |
| {0, []byte{t5, tx, tx, tx}}, |
| {0, []byte{t6, tx, tx, tx, tx}}, |
| } |
| |
| func mkUtf8(rune int) ([]byte, int) { |
| var b [utf8.UTFMax]byte |
| sz := utf8.EncodeRune(b[:], rune) |
| return b[:sz], sz |
| } |
| |
| func TestLookup(t *testing.T) { |
| for i, tt := range testRunes { |
| b, szg := mkUtf8(tt) |
| v, szt := testdata.lookup(b) |
| if int(v) != i { |
| t.Errorf("lookup(%U): found value %#x, expected %#x", i, v, i) |
| } |
| if szt != szg { |
| t.Errorf("lookup(%U): found size %d, expected %d", i, szt, szg) |
| } |
| } |
| for i, tt := range tests { |
| v, sz := testdata.lookup(tt.bytes) |
| if int(v) != 0 { |
| t.Errorf("lookup of illegal rune, case %d: found value %#x, expected 0", i, v) |
| } |
| if sz != tt.size { |
| t.Errorf("lookup of illegal rune, case %d: found size %d, expected %d", i, sz, tt.size) |
| } |
| } |
| } |
| |
| func TestLookupUnsafe(t *testing.T) { |
| for i, tt := range testRunes { |
| b, _ := mkUtf8(tt) |
| v := testdata.lookupUnsafe(b) |
| if int(v) != i { |
| t.Errorf("lookupUnsafe(%U): found value %#x, expected %#x", i, v, i) |
| } |
| } |
| } |
| |
| func TestLookupString(t *testing.T) { |
| for i, tt := range testRunes { |
| b, szg := mkUtf8(tt) |
| v, szt := testdata.lookupString(string(b)) |
| if int(v) != i { |
| t.Errorf("lookup(%U): found value %#x, expected %#x", i, v, i) |
| } |
| if szt != szg { |
| t.Errorf("lookup(%U): found size %d, expected %d", i, szt, szg) |
| } |
| } |
| for i, tt := range tests { |
| v, sz := testdata.lookupString(string(tt.bytes)) |
| if int(v) != 0 { |
| t.Errorf("lookup of illegal rune, case %d: found value %#x, expected 0", i, v) |
| } |
| if sz != tt.size { |
| t.Errorf("lookup of illegal rune, case %d: found size %d, expected %d", i, sz, tt.size) |
| } |
| } |
| } |
| |
| func TestLookupStringUnsafe(t *testing.T) { |
| for i, tt := range testRunes { |
| b, _ := mkUtf8(tt) |
| v := testdata.lookupStringUnsafe(string(b)) |
| if int(v) != i { |
| t.Errorf("lookupUnsafe(%U): found value %#x, expected %#x", i, v, i) |
| } |
| } |
| } |