1// Copyright 2016 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
5package cases
6
7import (
8	"testing"
9
10	"golang.org/x/text/internal/testtext"
11)
12
13var foldTestCases = []string{
14	"βß\u13f8",        // "βssᏰ"
15	"ab\u13fc\uab7aꭰ", // abᏴᎪᎠ
16	"affifflast",           // affifflast
17	"Iİiı\u0345",      // ii̇iıι
18	"µµΜΜςσΣΣ",        // μμμμσσσσ
19}
20
21func TestFold(t *testing.T) {
22	for _, tc := range foldTestCases {
23		testEntry := func(name string, c Caser, m func(r rune) string) {
24			want := ""
25			for _, r := range tc {
26				want += m(r)
27			}
28			if got := c.String(tc); got != want {
29				t.Errorf("%s(%s) = %+q; want %+q", name, tc, got, want)
30			}
31			dst := make([]byte, 256) // big enough to hold any result
32			src := []byte(tc)
33			v := testtext.AllocsPerRun(20, func() {
34				c.Transform(dst, src, true)
35			})
36			if v > 0 {
37				t.Errorf("%s(%s): number of allocs was %f; want 0", name, tc, v)
38			}
39		}
40		testEntry("FullFold", Fold(), func(r rune) string {
41			return runeFoldData(r).full
42		})
43		// TODO:
44		// testEntry("SimpleFold", Fold(Compact), func(r rune) string {
45		// 	return runeFoldData(r).simple
46		// })
47		// testEntry("SpecialFold", Fold(Turkic), func(r rune) string {
48		// 	return runeFoldData(r).special
49		// })
50	}
51}
52