blob: e15ba9bee67ae03b18e65f2bd2189e5321d2ace3 [file] [log] [blame]
David K. Bainbridge215e0242017-09-05 23:18:24 -07001// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build test
6
7package norm
8
9import "testing"
10
11func TestProperties(t *testing.T) {
12 var d runeData
13 CK := [2]string{"C", "K"}
14 for k, r := 1, rune(0); r < 0x2ffff; r++ {
15 if k < len(testData) && r == testData[k].r {
16 d = testData[k]
17 k++
18 }
19 s := string(r)
20 for j, p := range []Properties{NFC.PropertiesString(s), NFKC.PropertiesString(s)} {
21 f := d.f[j]
22 if p.CCC() != d.ccc {
23 t.Errorf("%U: ccc(%s): was %d; want %d %X", r, CK[j], p.CCC(), d.ccc, p.index)
24 }
25 if p.isYesC() != (f.qc == Yes) {
26 t.Errorf("%U: YesC(%s): was %v; want %v", r, CK[j], p.isYesC(), f.qc == Yes)
27 }
28 if p.combinesBackward() != (f.qc == Maybe) {
29 t.Errorf("%U: combines backwards(%s): was %v; want %v", r, CK[j], p.combinesBackward(), f.qc == Maybe)
30 }
31 if p.nLeadingNonStarters() != d.nLead {
32 t.Errorf("%U: nLead(%s): was %d; want %d %#v %#v", r, CK[j], p.nLeadingNonStarters(), d.nLead, p, d)
33 }
34 if p.nTrailingNonStarters() != d.nTrail {
35 t.Errorf("%U: nTrail(%s): was %d; want %d %#v %#v", r, CK[j], p.nTrailingNonStarters(), d.nTrail, p, d)
36 }
37 if p.combinesForward() != f.combinesForward {
38 t.Errorf("%U: combines forward(%s): was %v; want %v %#v", r, CK[j], p.combinesForward(), f.combinesForward, p)
39 }
40 // Skip Hangul as it is algorithmically computed.
41 if r >= hangulBase && r < hangulEnd {
42 continue
43 }
44 if p.hasDecomposition() {
45 if has := f.decomposition != ""; !has {
46 t.Errorf("%U: hasDecomposition(%s): was %v; want %v", r, CK[j], p.hasDecomposition(), has)
47 }
48 if string(p.Decomposition()) != f.decomposition {
49 t.Errorf("%U: decomp(%s): was %+q; want %+q", r, CK[j], p.Decomposition(), f.decomposition)
50 }
51 }
52 }
53 }
54}