summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/internal/colltab/iter_test.go
blob: 5783534c7df00db8c753fc5c14ef57650ddd7ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 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.
}