| // 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" |
| |
| func TestFold(t *testing.T) { |
| testCases := []string{ |
| "βß\u13f8", // "βssᏰ" |
| "ab\u13fc\uab7aꭰ", // abᏴᎪᎠ |
| "affifflast", // affifflast |
| "Iİiı\u0345", // ii̇iıι |
| "µµΜΜςσΣΣ", // μμμμσσσσ |
| } |
| for _, tc := range testCases { |
| 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 := testing.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 |
| // }) |
| } |
| } |
| |
| func BenchmarkFullFold(b *testing.B) { benchTransformer(b, Fold(), txtNonASCII) } |
| func BenchmarkFullFoldASCII(b *testing.B) { benchTransformer(b, Fold(), txtASCII) } |