55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
// Copyright 2013 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.
|
|
|
|
// +build test
|
|
|
|
package norm
|
|
|
|
import "testing"
|
|
|
|
func TestProperties(t *testing.T) {
|
|
var d runeData
|
|
CK := [2]string{"C", "K"}
|
|
for k, r := 1, rune(0); r < 0x2ffff; r++ {
|
|
if k < len(testData) && r == testData[k].r {
|
|
d = testData[k]
|
|
k++
|
|
}
|
|
s := string(r)
|
|
for j, p := range []Properties{NFC.PropertiesString(s), NFKC.PropertiesString(s)} {
|
|
f := d.f[j]
|
|
if p.CCC() != d.ccc {
|
|
t.Errorf("%U: ccc(%s): was %d; want %d %X", r, CK[j], p.CCC(), d.ccc, p.index)
|
|
}
|
|
if p.isYesC() != (f.qc == Yes) {
|
|
t.Errorf("%U: YesC(%s): was %v; want %v", r, CK[j], p.isYesC(), f.qc == Yes)
|
|
}
|
|
if p.combinesBackward() != (f.qc == Maybe) {
|
|
t.Errorf("%U: combines backwards(%s): was %v; want %v", r, CK[j], p.combinesBackward(), f.qc == Maybe)
|
|
}
|
|
if p.nLeadingNonStarters() != d.nLead {
|
|
t.Errorf("%U: nLead(%s): was %d; want %d %#v %#v", r, CK[j], p.nLeadingNonStarters(), d.nLead, p, d)
|
|
}
|
|
if p.nTrailingNonStarters() != d.nTrail {
|
|
t.Errorf("%U: nTrail(%s): was %d; want %d %#v %#v", r, CK[j], p.nTrailingNonStarters(), d.nTrail, p, d)
|
|
}
|
|
if p.combinesForward() != f.combinesForward {
|
|
t.Errorf("%U: combines forward(%s): was %v; want %v %#v", r, CK[j], p.combinesForward(), f.combinesForward, p)
|
|
}
|
|
// Skip Hangul as it is algorithmically computed.
|
|
if r >= hangulBase && r < hangulEnd {
|
|
continue
|
|
}
|
|
if p.hasDecomposition() {
|
|
if has := f.decomposition != ""; !has {
|
|
t.Errorf("%U: hasDecomposition(%s): was %v; want %v", r, CK[j], p.hasDecomposition(), has)
|
|
}
|
|
if string(p.Decomposition()) != f.decomposition {
|
|
t.Errorf("%U: decomp(%s): was %+q; want %+q", r, CK[j], p.Decomposition(), f.decomposition)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|