123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Copyright 2015 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 colltab
- import (
- "testing"
- )
- func TestDoNorm(t *testing.T) {
- const div = -1 // The insertion point of the next block.
- tests := []struct {
- in, out []int
- }{{
- in: []int{4, div, 3},
- out: []int{3, 4},
- }, {
- in: []int{4, div, 3, 3, 3},
- out: []int{3, 3, 3, 4},
- }, {
- in: []int{0, 4, div, 3},
- out: []int{0, 3, 4},
- }, {
- in: []int{0, 0, 4, 5, div, 3, 3},
- out: []int{0, 0, 3, 3, 4, 5},
- }, {
- in: []int{0, 0, 1, 4, 5, div, 3, 3},
- out: []int{0, 0, 1, 3, 3, 4, 5},
- }, {
- in: []int{0, 0, 1, 4, 5, div, 4, 4},
- out: []int{0, 0, 1, 4, 4, 4, 5},
- },
- }
- for j, tt := range tests {
- i := Iter{}
- var w, p int
- for k, cc := range tt.in {
- if cc == div {
- w = 100
- p = k
- continue
- }
- i.Elems = append(i.Elems, makeCE([]int{w, defaultSecondary, 2, cc}))
- }
- i.doNorm(p, i.Elems[p].CCC())
- if len(i.Elems) != len(tt.out) {
- t.Errorf("%d: length was %d; want %d", j, len(i.Elems), len(tt.out))
- }
- prevCCC := uint8(0)
- for k, ce := range i.Elems {
- if int(ce.CCC()) != tt.out[k] {
- t.Errorf("%d:%d: unexpected CCC. Was %d; want %d", j, k, ce.CCC(), tt.out[k])
- }
- if k > 0 && ce.CCC() == prevCCC && i.Elems[k-1].Primary() > ce.Primary() {
- t.Errorf("%d:%d: normalization crossed across CCC boundary.", j, k)
- }
- }
- }
- // Combining rune overflow is tested in search/pattern_test.go.
- }
|