| // Copyright 2016 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 cases |
| |
| import ( |
| "testing" |
| |
| "golang.org/x/text/internal/testtext" |
| ) |
| |
| var foldTestCases = []string{ |
| "βß\u13f8", // "βssᏰ" |
| "ab\u13fc\uab7aꭰ", // abᏴᎪᎠ |
| "affifflast", // affifflast |
| "Iİiı\u0345", // ii̇iıι |
| "µµΜΜςσΣΣ", // μμμμσσσσ |
| } |
| |
| func TestFold(t *testing.T) { |
| for _, tc := range foldTestCases { |
| testEntry := func(name string, c Caser, m func(r rune) string) { |
| want := "" |
| for _, r := range tc { |
| want += m(r) |
| } |
| if got := c.String(tc); got != want { |
| t.Errorf("%s(%s) = %+q; want %+q", name, tc, got, want) |
| } |
| dst := make([]byte, 256) // big enough to hold any result |
| src := []byte(tc) |
| v := testtext.AllocsPerRun(20, func() { |
| c.Transform(dst, src, true) |
| }) |
| if v > 0 { |
| t.Errorf("%s(%s): number of allocs was %f; want 0", name, tc, v) |
| } |
| } |
| testEntry("FullFold", Fold(), func(r rune) string { |
| return runeFoldData(r).full |
| }) |
| // TODO: |
| // testEntry("SimpleFold", Fold(Compact), func(r rune) string { |
| // return runeFoldData(r).simple |
| // }) |
| // testEntry("SpecialFold", Fold(Turkic), func(r rune) string { |
| // return runeFoldData(r).special |
| // }) |
| } |
| } |