From: Jan Kotas Date: Mon, 7 Oct 2019 23:22:34 +0000 (-0700) Subject: Improve test coverage for Span-based globalization APIs (dotnet/corefx#41224) X-Git-Tag: submit/tizen/20210909.063632~11031^2~343 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0515224671424e2d740a00888c29314a144d848c;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Improve test coverage for Span-based globalization APIs (dotnet/corefx#41224) * Improve test coverage for Span-based globalization APIs * More interesting test cases Commit migrated from https://github.com/dotnet/corefx/commit/14d971cdeb7b625bb7b753d48760f2cb98b32358 --- diff --git a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IndexOf.cs b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IndexOf.cs index 78da2f0..72422cd4 100644 --- a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IndexOf.cs +++ b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IndexOf.cs @@ -13,6 +13,7 @@ namespace System.Globalization.Tests private static CompareInfo s_currentCompare = CultureInfo.CurrentCulture.CompareInfo; private static CompareInfo s_hungarianCompare = new CultureInfo("hu-HU").CompareInfo; private static CompareInfo s_turkishCompare = new CultureInfo("tr-TR").CompareInfo; + private static CompareInfo s_slovakCompare = new CultureInfo("sk-SK").CompareInfo; public static IEnumerable IndexOf_TestData() { @@ -36,6 +37,11 @@ namespace System.Globalization.Tests yield return new object[] { s_invariantCompare, "foobardzsdzs", "rddzs", 0, 12, CompareOptions.None, -1 }; yield return new object[] { s_invariantCompare, "foobardzsdzs", "rddzs", 0, 12, CompareOptions.Ordinal, -1 }; + // Slovak + yield return new object[] { s_slovakCompare, "ch", "h", 0, 2, CompareOptions.None, -1 }; + yield return new object[] { s_slovakCompare, "chodit hore", "HO", 0, 2, CompareOptions.IgnoreCase, -1 }; + yield return new object[] { s_slovakCompare, "chh", "h", 0, 3, CompareOptions.None, 2 }; + // Turkish yield return new object[] { s_turkishCompare, "Hi", "I", 0, 2, CompareOptions.None, -1 }; yield return new object[] { s_turkishCompare, "Hi", "I", 0, 2, CompareOptions.IgnoreCase, -1 }; @@ -55,6 +61,7 @@ namespace System.Globalization.Tests yield return new object[] { s_invariantCompare, "Exhibit \u00C0", "a\u0300", 0, 9, CompareOptions.OrdinalIgnoreCase, -1 }; yield return new object[] { s_invariantCompare, "FooBar", "Foo\u0400Bar", 0, 6, CompareOptions.Ordinal, -1 }; yield return new object[] { s_invariantCompare, "TestFooBA\u0300R", "FooB\u00C0R", 0, 11, CompareOptions.IgnoreNonSpace, 4 }; + yield return new object[] { s_invariantCompare, "o\u0308", "o", 0, 2, CompareOptions.None, -1 }; // Ignore symbols yield return new object[] { s_invariantCompare, "More Test's", "Tests", 0, 11, CompareOptions.IgnoreSymbols, 5 }; @@ -176,7 +183,16 @@ namespace System.Globalization.Tests } // Use IndexOf(string, string, int, int, CompareOptions) Assert.Equal(expected, compareInfo.IndexOf(source, value, startIndex, count, options)); - } + + if ((compareInfo == s_invariantCompare) && ((options == CompareOptions.None) || (options == CompareOptions.IgnoreCase))) + { + StringComparison stringComparison = (options == CompareOptions.IgnoreCase) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture; + // Use int string.IndexOf(string, StringComparison) + Assert.Equal(expected, source.IndexOf(value, startIndex, count, stringComparison)); + // Use int MemoryExtensions.IndexOf(this ReadOnlySpan, ReadOnlySpan, StringComparison) + Assert.Equal((expected == -1) ? -1 : (expected - startIndex), source.AsSpan(startIndex, count).IndexOf(value.AsSpan(), stringComparison)); + } + } private static void IndexOf_Char(CompareInfo compareInfo, string source, char value, int startIndex, int count, CompareOptions options, int expected) { diff --git a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsPrefix.cs b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsPrefix.cs index b886e8c..a9a93c5 100644 --- a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsPrefix.cs +++ b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsPrefix.cs @@ -94,6 +94,13 @@ namespace System.Globalization.Tests Assert.Equal(expected, compareInfo.IsPrefix(source, value)); } Assert.Equal(expected, compareInfo.IsPrefix(source, value, options)); + + if ((compareInfo == s_invariantCompare) && ((options == CompareOptions.None) || (options == CompareOptions.IgnoreCase))) + { + StringComparison stringComparison = (options == CompareOptions.IgnoreCase) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture; + Assert.Equal(expected, source.StartsWith(value, stringComparison)); + Assert.Equal(expected, source.AsSpan().StartsWith(value.AsSpan(), stringComparison)); + } } [Fact] diff --git a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsSuffix.cs b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsSuffix.cs index 3e70c0f..3d920dd 100644 --- a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsSuffix.cs +++ b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.IsSuffix.cs @@ -13,6 +13,7 @@ namespace System.Globalization.Tests private static CompareInfo s_hungarianCompare = new CultureInfo("hu-HU").CompareInfo; private static CompareInfo s_turkishCompare = new CultureInfo("tr-TR").CompareInfo; private static CompareInfo s_frenchCompare = new CultureInfo("fr-FR").CompareInfo; + private static CompareInfo s_slovakCompare = new CultureInfo("sk-SK").CompareInfo; public static IEnumerable IsSuffix_TestData() { @@ -33,6 +34,11 @@ namespace System.Globalization.Tests yield return new object[] { s_hungarianCompare, "dz", "z", CompareOptions.None, false }; yield return new object[] { s_hungarianCompare, "dz", "z", CompareOptions.Ordinal, true }; + // Slovak + yield return new object[] { s_slovakCompare, "ch", "h", CompareOptions.None, false }; + yield return new object[] { s_slovakCompare, "velmi chora", "hora", CompareOptions.None, false }; + yield return new object[] { s_slovakCompare, "chh", "H", CompareOptions.IgnoreCase, true }; + // Turkish yield return new object[] { s_turkishCompare, "Hi", "I", CompareOptions.None, false }; yield return new object[] { s_turkishCompare, "Hi", "I", CompareOptions.IgnoreCase, false }; @@ -91,6 +97,13 @@ namespace System.Globalization.Tests Assert.Equal(expected, compareInfo.IsSuffix(source, value)); } Assert.Equal(expected, compareInfo.IsSuffix(source, value, options)); + + if ((compareInfo == s_invariantCompare) && ((options == CompareOptions.None) || (options == CompareOptions.IgnoreCase))) + { + StringComparison stringComparison = (options == CompareOptions.IgnoreCase) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture; + Assert.Equal(expected, source.EndsWith(value, stringComparison)); + Assert.Equal(expected, source.AsSpan().EndsWith(value.AsSpan(), stringComparison)); + } } [Fact] diff --git a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.LastIndexOf.cs b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.LastIndexOf.cs index cd90b17..9026f88 100644 --- a/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.LastIndexOf.cs +++ b/src/libraries/System.Globalization/tests/CompareInfo/CompareInfoTests.LastIndexOf.cs @@ -12,6 +12,7 @@ namespace System.Globalization.Tests private static CompareInfo s_invariantCompare = CultureInfo.InvariantCulture.CompareInfo; private static CompareInfo s_hungarianCompare = new CultureInfo("hu-HU").CompareInfo; private static CompareInfo s_turkishCompare = new CultureInfo("tr-TR").CompareInfo; + private static CompareInfo s_slovakCompare = new CultureInfo("sk-SK").CompareInfo; public static IEnumerable LastIndexOf_TestData() { @@ -47,6 +48,11 @@ namespace System.Globalization.Tests yield return new object[] { s_invariantCompare, "foobardzsdzs", "rddzs", 11, 12, CompareOptions.None, -1 }; yield return new object[] { s_invariantCompare, "foobardzsdzs", "rddzs", 11, 12, CompareOptions.Ordinal, -1 }; + // Slovak + yield return new object[] { s_slovakCompare, "ch", "h", 0, 1, CompareOptions.None, -1 }; + yield return new object[] { s_slovakCompare, "hore chodit", "HO", 11, 12, CompareOptions.IgnoreCase, 0 }; + yield return new object[] { s_slovakCompare, "chh", "h", 2, 2, CompareOptions.None, 2 }; + // Turkish yield return new object[] { s_turkishCompare, "Hi", "I", 1, 2, CompareOptions.None, -1 }; yield return new object[] { s_turkishCompare, "Hi", "I", 1, 2, CompareOptions.IgnoreCase, -1 }; @@ -67,6 +73,7 @@ namespace System.Globalization.Tests yield return new object[] { s_invariantCompare, "Exhibit \u00C0", "a\u0300", 8, 9, CompareOptions.Ordinal, -1 }; yield return new object[] { s_invariantCompare, "FooBar", "Foo\u0400Bar", 5, 6, CompareOptions.Ordinal, -1 }; yield return new object[] { s_invariantCompare, "TestFooBA\u0300R", "FooB\u00C0R", 10, 11, CompareOptions.IgnoreNonSpace, 4 }; + yield return new object[] { s_invariantCompare, "o\u0308", "o", 1, 2, CompareOptions.None, -1 }; // Ignore symbols yield return new object[] { s_invariantCompare, "More Test's", "Tests", 10, 11, CompareOptions.IgnoreSymbols, 5 }; @@ -149,6 +156,30 @@ namespace System.Globalization.Tests } // Use LastIndexOf(string, string, int, int, CompareOptions) Assert.Equal(expected, compareInfo.LastIndexOf(source, value, startIndex, count, options)); + + if ((compareInfo == s_invariantCompare) && ((options == CompareOptions.None) || (options == CompareOptions.IgnoreCase))) + { + StringComparison stringComparison = (options == CompareOptions.IgnoreCase) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.InvariantCulture; + + // Use int string.LastIndexOf(string, StringComparison) + Assert.Equal(expected, source.LastIndexOf(value, startIndex, count, stringComparison)); + + // Use int MemoryExtensions.LastIndexOf(this ReadOnlySpan, ReadOnlySpan, StringComparison) + // Filter differences betweeen string-based and Span-based LastIndexOf + // - Empty value handling - https://github.com/dotnet/coreclr/issues/26608 + // - Negative count + if (value.Length == 0 || count < 0) + return; + + if (startIndex == source.Length) + { + startIndex--; + if (count > 0) + count--; + } + int leftStartIndex = (startIndex - count + 1); + Assert.Equal((expected == -1) ? -1 : (expected - leftStartIndex), source.AsSpan(leftStartIndex, count).LastIndexOf(value.AsSpan(), stringComparison)); + } } private static void LastIndexOf_Char(CompareInfo compareInfo, string source, char value, int startIndex, int count, CompareOptions options, int expected) diff --git a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs index 59394c2..2ea617b 100644 --- a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs +++ b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs @@ -657,6 +657,7 @@ namespace System.Globalization.Tests { Assert.Equal(result, CultureInfo.GetCultureInfo(cul).CompareInfo.IndexOf(source, value, startIndex, count, options)); Assert.Equal(result, source.IndexOf(value, startIndex, count, GetStringComparison(options))); + Assert.Equal((result == -1) ? -1 : (result - startIndex), source.AsSpan(startIndex, count).IndexOf(value.AsSpan(), GetStringComparison(options))); } } @@ -668,6 +669,21 @@ namespace System.Globalization.Tests { Assert.Equal(result, CultureInfo.GetCultureInfo(cul).CompareInfo.LastIndexOf(source, value, startIndex, count, options)); Assert.Equal(result, source.LastIndexOf(value, startIndex, count, GetStringComparison(options))); + + // Filter differences betweeen string-based and Span-based LastIndexOf + // - Empty value handling - https://github.com/dotnet/coreclr/issues/26608 + // - Negative count + if (value.Length == 0 || count < 0) + continue; + + if (startIndex == source.Length) + { + startIndex--; + if (count > 0) + count--; + } + int leftStartIndex = (startIndex - count + 1); + Assert.Equal((result == -1) ? -1 : (result - leftStartIndex), source.AsSpan(leftStartIndex, count).LastIndexOf(value.AsSpan(), GetStringComparison(options))); } } @@ -679,6 +695,7 @@ namespace System.Globalization.Tests { Assert.Equal(result, CultureInfo.GetCultureInfo(cul).CompareInfo.IsPrefix(source, value, options)); Assert.Equal(result, source.StartsWith(value, GetStringComparison(options))); + Assert.Equal(result, source.AsSpan().StartsWith(value.AsSpan(), GetStringComparison(options))); } } @@ -690,6 +707,7 @@ namespace System.Globalization.Tests { Assert.Equal(result, CultureInfo.GetCultureInfo(cul).CompareInfo.IsSuffix(source, value, options)); Assert.Equal(result, source.EndsWith(value, GetStringComparison(options))); + Assert.Equal(result, source.AsSpan().EndsWith(value.AsSpan(), GetStringComparison(options))); } }