From 5c3e69627a9e5212f5c8bbe7c7b6cc459721d0a5 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Mon, 20 Jun 2022 13:44:39 -0700 Subject: [PATCH] Fix Ordinal Ignore Case string Compare --- .../System/Globalization/OrdinalCasing.Icu.cs | 2 +- .../System.Runtime/tests/System/StringTests.cs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs index 3e104cba04488f..2ace6b3540f7e4 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs @@ -232,7 +232,7 @@ internal static int CompareStringIgnoreCase(ref char strA, int lengthA, ref char continue; } - return a - b; + return aUpper - bUpper; } // diff --git a/src/libraries/System.Runtime/tests/System/StringTests.cs b/src/libraries/System.Runtime/tests/System/StringTests.cs index b0786bb2370fb5..acf8ae0f9c46aa 100644 --- a/src/libraries/System.Runtime/tests/System/StringTests.cs +++ b/src/libraries/System.Runtime/tests/System/StringTests.cs @@ -1960,5 +1960,22 @@ public static void EqualityTests_AsciiOptimizations() } } } + + [Theory] + [InlineData("a", "A", 0)] + [InlineData("A", "a", 0)] + [InlineData("Ab", "aB", 0)] + [InlineData("aB", "Ab", 0)] + [InlineData("aB", "Aa", 1)] + [InlineData("aa", "aB", -1)] + [InlineData("\u0160a", "\u0160A", 0)] + [InlineData("\u0160a", "\u0160B", -1)] + [InlineData("\u0160b", "\u0160A", 1)] + [InlineData("\u0160b\u0160\u0160\u0160", "\u0160A\u0160\u0160\u0160", 1)] + [InlineData("\u0160A\u0160\u0160\u0160", "\u0160b\u0160\u0160\u0160", -1)] + public static void TestCompareOrdinalIgnoreCase(string a, string b, int sign) + { + Assert.Equal(sign, Math.Sign(string.Compare(a, b, StringComparison.OrdinalIgnoreCase))); + } } }