Fix Ordinal Ignore Case string compare (#71022)
authorTarek Mahmoud Sayed <tarekms@microsoft.com>
Tue, 21 Jun 2022 05:35:41 +0000 (22:35 -0700)
committerGitHub <noreply@github.com>
Tue, 21 Jun 2022 05:35:41 +0000 (22:35 -0700)
src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs
src/libraries/System.Runtime/tests/System/StringTests.cs

index 7900bab..6a3851b 100644 (file)
@@ -231,7 +231,7 @@ namespace System.Globalization
                             continue;
                         }
 
-                        return a - b;
+                        return aUpper - bUpper;
                     }
 
                     //
index 080c200..dd9c7c5 100644 (file)
@@ -1969,5 +1969,22 @@ namespace System.Tests
                 }
             }
         }
+
+        [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)));
+        }
     }
 }