yield return new object[] { s_invariantCompare, "FooBA\u0300R", "FooB\u00C0R", CompareOptions.IgnoreNonSpace, true };
yield return new object[] { s_invariantCompare, "o\u0308", "o", CompareOptions.None, false };
yield return new object[] { s_invariantCompare, "o\u0308", "o", CompareOptions.Ordinal, true };
+ yield return new object[] { s_invariantCompare, "o\u0000\u0308", "o", CompareOptions.None, true };
// Surrogates
yield return new object[] { s_invariantCompare, "\uD800\uDC00", "\uD800\uDC00", CompareOptions.None, true };
yield return new object[] { s_frenchCompare, "\u0153", "oe", CompareOptions.None, PlatformDetection.IsWindows ? true : false };
yield return new object[] { s_invariantCompare, "\uD800\uDC00", "\uD800", CompareOptions.None, PlatformDetection.IsWindows ? true : false };
yield return new object[] { s_invariantCompare, "\uD800\uDC00", "\uD800", CompareOptions.IgnoreCase, PlatformDetection.IsWindows ? true : false };
+
+ // ICU bugs
+ // UInt16 overflow: https://unicode-org.atlassian.net/browse/ICU-20832 fixed in https://github.com/unicode-org/icu/pull/840 (ICU 65)
+ if (PlatformDetection.IsWindows || PlatformDetection.ICUVersion.Major >= 65)
+ {
+ yield return new object[] { s_frenchCompare, "b", new string('a', UInt16.MaxValue + 1), CompareOptions.None, false };
+ }
}
[Theory]