// 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. }