summaryrefslogtreecommitdiffstats
path: root/libgo/go/exp/norm/trie_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/exp/norm/trie_test.go')
-rw-r--r--libgo/go/exp/norm/trie_test.go45
1 files changed, 41 insertions, 4 deletions
diff --git a/libgo/go/exp/norm/trie_test.go b/libgo/go/exp/norm/trie_test.go
index ad87d972b02..5649fb7eea7 100644
--- a/libgo/go/exp/norm/trie_test.go
+++ b/libgo/go/exp/norm/trie_test.go
@@ -8,6 +8,41 @@ import (
// Test data is located in triedata_test.go; generated by maketesttables.
var testdata = testdataTrie
+type rangeTest struct {
+ block uint8
+ lookup byte
+ result uint16
+ table []valueRange
+ offsets []uint16
+}
+
+var range1Off = []uint16{0, 2}
+var range1 = []valueRange{
+ {0, 1, 0},
+ {1, 0x80, 0x80},
+ {0, 2, 0},
+ {1, 0x80, 0x80},
+ {9, 0xff, 0xff},
+}
+
+var rangeTests = []rangeTest{
+ {10, 0x80, 1, range1, range1Off},
+ {10, 0x00, 0, range1, range1Off},
+ {11, 0x80, 1, range1, range1Off},
+ {11, 0xff, 9, range1, range1Off},
+ {11, 0x00, 0, range1, range1Off},
+}
+
+func TestLookupSparse(t *testing.T) {
+ for i, test := range rangeTests {
+ n := trie{sparse: test.table, sparseOffset: test.offsets, cutoff: 10}
+ v := n.lookupValue(test.block, test.lookup)
+ if v != test.result {
+ t.Errorf("LookupSparse:%d: found %X; want %X", i, v, test.result)
+ }
+ }
+}
+
// Test cases for illegal runes.
type trietest struct {
size int
@@ -32,8 +67,10 @@ var tests = []trietest{
{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}},
+
+ // we only support UTF-8 up to utf8.UTFMax bytes (4 bytes)
+ {1, []byte{t5, tx, tx, tx, tx}},
+ {1, []byte{t6, tx, tx, tx, tx, tx}},
}
func mkUtf8(rune int) ([]byte, int) {
@@ -47,10 +84,10 @@ func TestLookup(t *testing.T) {
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)
+ t.Errorf("lookup(%U): found value %#x, expected %#x", tt, v, i)
}
if szt != szg {
- t.Errorf("lookup(%U): found size %d, expected %d", i, szt, szg)
+ t.Errorf("lookup(%U): found size %d, expected %d", tt, szt, szg)
}
}
for i, tt := range tests {
OpenPOWER on IntegriCloud