| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright (c) Tailscale Inc & contributors
- // SPDX-License-Identifier: BSD-3-Clause
- package stringsx
- import (
- "cmp"
- "strings"
- "testing"
- )
- func TestCompareFold(t *testing.T) {
- tests := []struct {
- a, b string
- }{
- // Basic ASCII cases
- {"", ""},
- {"a", "a"},
- {"a", "A"},
- {"A", "a"},
- {"a", "b"},
- {"b", "a"},
- {"abc", "ABC"},
- {"ABC", "abc"},
- {"abc", "abd"},
- {"abd", "abc"},
- // Length differences
- {"abc", "ab"},
- {"ab", "abc"},
- // Unicode cases
- {"世界", "世界"},
- {"Hello世界", "hello世界"},
- {"世界Hello", "世界hello"},
- {"世界", "世界x"},
- {"世界x", "世界"},
- // Special case folding examples
- {"ß", "ss"}, // German sharp s
- {"fi", "fi"}, // fi ligature
- {"Σ", "σ"}, // Greek sigma
- {"İ", "i\u0307"}, // Turkish dotted I
- // Mixed cases
- {"HelloWorld", "helloworld"},
- {"HELLOWORLD", "helloworld"},
- {"helloworld", "HELLOWORLD"},
- {"HelloWorld", "helloworld"},
- {"helloworld", "HelloWorld"},
- // Edge cases
- {" ", " "},
- {"1", "1"},
- {"123", "123"},
- {"!@#", "!@#"},
- }
- wants := []int{}
- for _, tt := range tests {
- got := CompareFold(tt.a, tt.b)
- want := cmp.Compare(strings.ToLower(tt.a), strings.ToLower(tt.b))
- if got != want {
- t.Errorf("CompareFold(%q, %q) = %v, want %v", tt.a, tt.b, got, want)
- }
- wants = append(wants, want)
- }
- if n := testing.AllocsPerRun(1000, func() {
- for i, tt := range tests {
- if CompareFold(tt.a, tt.b) != wants[i] {
- panic("unexpected")
- }
- }
- }); n > 0 {
- t.Errorf("allocs = %v; want 0", int(n))
- }
- }
|