| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package liner
- import (
- "strconv"
- "testing"
- )
- func accent(in []rune) []rune {
- var out []rune
- for _, r := range in {
- out = append(out, r)
- out = append(out, '\u0301')
- }
- return out
- }
- type testCase struct {
- s []rune
- glyphs int
- }
- var testCases = []testCase{
- {[]rune("query"), 5},
- {[]rune("私"), 2},
- {[]rune("hello世界"), 9},
- }
- func TestCountGlyphs(t *testing.T) {
- for _, testCase := range testCases {
- count := countGlyphs(testCase.s)
- if count != testCase.glyphs {
- t.Errorf("ASCII count incorrect. %d != %d", count, testCase.glyphs)
- }
- count = countGlyphs(accent(testCase.s))
- if count != testCase.glyphs {
- t.Errorf("Accent count incorrect. %d != %d", count, testCase.glyphs)
- }
- }
- }
- func compare(a, b []rune, name string, t *testing.T) {
- if len(a) != len(b) {
- t.Errorf(`"%s" != "%s" in %s"`, string(a), string(b), name)
- return
- }
- for i := range a {
- if a[i] != b[i] {
- t.Errorf(`"%s" != "%s" in %s"`, string(a), string(b), name)
- return
- }
- }
- }
- func TestPrefixGlyphs(t *testing.T) {
- for _, testCase := range testCases {
- for i := 0; i <= len(testCase.s); i++ {
- iter := strconv.Itoa(i)
- out := getPrefixGlyphs(testCase.s, i)
- compare(out, testCase.s[:i], "ascii prefix "+iter, t)
- out = getPrefixGlyphs(accent(testCase.s), i)
- compare(out, accent(testCase.s[:i]), "accent prefix "+iter, t)
- }
- out := getPrefixGlyphs(testCase.s, 999)
- compare(out, testCase.s, "ascii prefix overflow", t)
- out = getPrefixGlyphs(accent(testCase.s), 999)
- compare(out, accent(testCase.s), "accent prefix overflow", t)
- out = getPrefixGlyphs(testCase.s, -3)
- if len(out) != 0 {
- t.Error("ascii prefix negative")
- }
- out = getPrefixGlyphs(accent(testCase.s), -3)
- if len(out) != 0 {
- t.Error("accent prefix negative")
- }
- }
- }
- func TestSuffixGlyphs(t *testing.T) {
- for _, testCase := range testCases {
- for i := 0; i <= len(testCase.s); i++ {
- iter := strconv.Itoa(i)
- out := getSuffixGlyphs(testCase.s, i)
- compare(out, testCase.s[len(testCase.s)-i:], "ascii suffix "+iter, t)
- out = getSuffixGlyphs(accent(testCase.s), i)
- compare(out, accent(testCase.s[len(testCase.s)-i:]), "accent suffix "+iter, t)
- }
- out := getSuffixGlyphs(testCase.s, 999)
- compare(out, testCase.s, "ascii suffix overflow", t)
- out = getSuffixGlyphs(accent(testCase.s), 999)
- compare(out, accent(testCase.s), "accent suffix overflow", t)
- out = getSuffixGlyphs(testCase.s, -3)
- if len(out) != 0 {
- t.Error("ascii suffix negative")
- }
- out = getSuffixGlyphs(accent(testCase.s), -3)
- if len(out) != 0 {
- t.Error("accent suffix negative")
- }
- }
- }
|