// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package collate

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestUnicode0900BoundaryRuneUsesImplicitWeight(t *testing.T) {
	collator := &unicode0900AICICollator{}
	boundaryRune := rune(0x2CEA1)
	boundaryStr := string(boundaryRune)

	// U+2CEA1 is the first rune outside MapTable4 and must use implicit weight.
	first, second := convertRuneUnicodeCI0900(boundaryRune)
	require.Equal(t, uint64(0xCEA1_0000|0xFBC5), first)
	require.Zero(t, second)
	require.Equal(t, []byte{0xFB, 0xC5, 0xCE, 0xA1}, collator.Key(boundaryStr))
	require.Equal(t, 0, collator.Compare(boundaryStr, boundaryStr))
	require.Equal(t, -1, collator.Compare(boundaryStr, string(boundaryRune+1)))
}
