// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package build import ( "bytes" "fmt" "testing" ) // We take the smallest, largest and an arbitrary value for each // of the UTF-8 sequence lengths. var testRunes = []rune{ 0x01, 0x0C, 0x7F, // 1-byte sequences 0x80, 0x100, 0x7FF, // 2-byte sequences 0x800, 0x999, 0xFFFF, // 3-byte sequences 0x10000, 0x10101, 0x10FFFF, // 4-byte sequences 0x200, 0x201, 0x202, 0x210, 0x215, // five entries in one sparse block } func makeTestTrie(t *testing.T) trie { n := newNode() for i, r := range testRunes { n.insert(r, uint32(i)) } idx := newTrieBuilder() idx.addTrie(n) tr, err := idx.generate() if err != nil { t.Errorf(err.Error()) } return *tr } func TestGenerateTrie(t *testing.T) { testdata := makeTestTrie(t) buf := &bytes.Buffer{} testdata.printArrays(buf, "test") fmt.Fprintf(buf, "var testTrie = ") testdata.printStruct(buf, &trieHandle{19, 0}, "test") if output != buf.String() { t.Error("output differs") } } var output = `// testValues: 832 entries, 3328 bytes // Block 2 is the null block. var testValues = [832]uint32 { // Block 0x0, offset 0x0 0x000c:0x00000001, // Block 0x1, offset 0x40 0x007f:0x00000002, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 0x00c0:0x00000003, // Block 0x4, offset 0x100 0x0100:0x00000004, // Block 0x5, offset 0x140 0x0140:0x0000000c, 0x0141:0x0000000d, 0x0142:0x0000000e, 0x0150:0x0000000f, 0x0155:0x00000010, // Block 0x6, offset 0x180 0x01bf:0x00000005, // Block 0x7, offset 0x1c0 0x01c0:0x00000006, // Block 0x8, offset 0x200 0x0219:0x00000007, // Block 0x9, offset 0x240 0x027f:0x00000008, // Block 0xa, offset 0x280 0x0280:0x00000009, // Block 0xb, offset 0x2c0 0x02c1:0x0000000a, // Block 0xc, offset 0x300 0x033f:0x0000000b, } // testLookup: 640 entries, 1280 bytes // Block 0 is the null block. var testLookup = [640]uint16 { // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 0x0e0:0x05, 0x0e6:0x06, // Block 0x4, offset 0x100 0x13f:0x07, // Block 0x5, offset 0x140 0x140:0x08, 0x144:0x09, // Block 0x6, offset 0x180 0x190:0x03, // Block 0x7, offset 0x1c0 0x1ff:0x0a, // Block 0x8, offset 0x200 0x20f:0x05, // Block 0x9, offset 0x240 0x242:0x01, 0x244:0x02, 0x248:0x03, 0x25f:0x04, 0x260:0x01, 0x26f:0x02, 0x270:0x04, 0x274:0x06, } var testTrie = trie{ testLookup[1216:], testValues[0:], testLookup[:], testValues[:]}`