// Copyright 2013 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 json

import (
	"bytes"
	"testing"
)

func FuzzEqualFold(f *testing.F) {
	for _, ss := range [][2]string{
		{"", ""},
		{"123abc", "123ABC"},
		{"αβδ", "ΑΒΔ"},
		{"abc", "xyz"},
		{"abc", "XYZ"},
		{"1", "2"},
		{"hello, world!", "hello, world!"},
		{"hello, world!", "Hello, World!"},
		{"hello, world!", "HELLO, WORLD!"},
		{"hello, world!", "jello, world!"},
		{"γειά, κόσμε!", "γειά, κόσμε!"},
		{"γειά, κόσμε!", "Γειά, Κόσμε!"},
		{"γειά, κόσμε!", "ΓΕΙΆ, ΚΌΣΜΕ!"},
		{"γειά, κόσμε!", "ΛΕΙΆ, ΚΌΣΜΕ!"},
		{"AESKey", "aesKey"},
		{"AESKEY", "aes_key"},
		{"aes_key", "AES_KEY"},
		{"AES_KEY", "aes-key"},
		{"aes-key", "AES-KEY"},
		{"AES-KEY", "aesKey"},
		{"aesKey", "AesKey"},
		{"AesKey", "AESKey"},
		{"AESKey", "aeskey"},
		{"DESKey", "aeskey"},
		{"AES Key", "aeskey"},
	} {
		f.Add([]byte(ss[0]), []byte(ss[1]))
	}
	equalFold := func(x, y []byte) bool { return string(foldName(x)) == string(foldName(y)) }
	f.Fuzz(func(t *testing.T, x, y []byte) {
		got := equalFold(x, y)
		want := bytes.EqualFold(x, y)
		if got != want {
			t.Errorf("equalFold(%q, %q) = %v, want %v", x, y, got, want)
		}
	})
}
