summaryrefslogtreecommitdiff
path: root/tests/src/CoreMangLib/cti/system/string/stringcompare9.cs
diff options
context:
space:
mode:
authordotnet-bot <dotnet-bot@microsoft.com>2015-09-30 12:20:52 -0700
committerBryan Arant <bryanar@microsoft.com>2015-10-18 23:09:47 -0700
commit004514c07bcf5230b518befd75f794733b5f9067 (patch)
treef05d9d5692627acac1d043915eb5b20a74f403ec /tests/src/CoreMangLib/cti/system/string/stringcompare9.cs
parentddff89241f682995bdde165de89b579573a338aa (diff)
downloadcoreclr-004514c07bcf5230b518befd75f794733b5f9067.tar.gz
coreclr-004514c07bcf5230b518befd75f794733b5f9067.tar.bz2
coreclr-004514c07bcf5230b518befd75f794733b5f9067.zip
Managed Test Port
This is a collection of managed runtime tests from an internal legacy test tree.
Diffstat (limited to 'tests/src/CoreMangLib/cti/system/string/stringcompare9.cs')
-rw-r--r--tests/src/CoreMangLib/cti/system/string/stringcompare9.cs215
1 files changed, 215 insertions, 0 deletions
diff --git a/tests/src/CoreMangLib/cti/system/string/stringcompare9.cs b/tests/src/CoreMangLib/cti/system/string/stringcompare9.cs
new file mode 100644
index 0000000000..9eed0ade49
--- /dev/null
+++ b/tests/src/CoreMangLib/cti/system/string/stringcompare9.cs
@@ -0,0 +1,215 @@
+using System;
+using System.Text;
+using System.Globalization;
+using TestLibrary;
+
+public class StringCompare
+{
+ public static string[] InterestingStrings = new string[] { null, "", "a", "1", "-", "A", "!", "abc", "aBc", "a\u0400Bc", "I", "i", "\u0130", "\u0131", "A", "\uFF21", "\uFE57"};
+
+ public bool RunTests()
+ {
+ bool retVal = true;
+
+ TestLibrary.TestFramework.LogInformation("[Positive]");
+ retVal = PosTest1() && retVal;
+ retVal = PosTest2() && retVal;
+ retVal = PosTest3() && retVal;
+ retVal = PosTest4() && retVal;
+ return retVal;
+ }
+
+
+ public bool PosTest1()
+ {
+ bool retVal = true;
+
+ TestLibrary.TestFramework.BeginScenario("PosTest1: Compare interesting strings ordinally");
+
+ try
+ {
+ foreach (string s in InterestingStrings)
+ {
+ foreach (string r in InterestingStrings)
+ {
+ retVal &= TestStrings(s, r);
+ }
+ }
+
+ }
+ catch (Exception e)
+ {
+ TestLibrary.TestFramework.LogError("001.2", "Unexpected exception: " + e);
+ retVal = false;
+ }
+ return retVal;
+ }
+
+ public bool PosTest2()
+ {
+ bool retVal = true;
+
+ TestLibrary.TestFramework.BeginScenario("PosTest2: Compare many characters");
+
+ try
+ {
+ for (int i = 0; i < 40; i++) // Ok, 40 isn't that many... but this takes way too long
+ {
+ char c = Generator.GetChar(-55);
+ if (string.Compare(new string(new char[] { c }), new string(new char[] { c }), StringComparison.Ordinal) != 0)
+ {
+ TestLibrary.TestFramework.LogError("002.1", "Character " + i.ToString() + " is not equal to itself ordinally!");
+ retVal = false;
+ }
+
+ for (int j = 0; j < (int)c; j++)
+ {
+ int compareResult = string.Compare(new string(new char[] { c }), new string(new char[] { (char)j }), StringComparison.Ordinal);
+ if (compareResult != 0) compareResult = compareResult / Math.Abs(compareResult);
+ if (compareResult != 1)
+ {
+ TestLibrary.TestFramework.LogError("002.2", "Character " + ((int)c).ToString() + " is not greater than character " + j.ToString() + ", Compare result: " + compareResult.ToString());
+ retVal = false;
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ TestLibrary.TestFramework.LogError("002.4", "Unexpected exception: " + e);
+ retVal = false;
+ }
+ return retVal;
+ }
+
+ public bool PosTest3()
+ {
+ bool retVal = true;
+
+ TestLibrary.TestFramework.BeginScenario("PosTest3: Compare many strings");
+
+ try
+ {
+ for (int i = 0; i < 1000; i++)
+ {
+ string str1 = Generator.GetString(-55, false, 5, 20);
+ string str2 = Generator.GetString(-55, false, 5, 20);
+ if (string.Compare(str1, str1, StringComparison.Ordinal) != 0)
+ {
+ TestLibrary.TestFramework.LogError("003.1", "Comparison not as expected! Actual result: " + string.Compare(str1, str1, StringComparison.Ordinal).ToString() + ", Expected result: 0");
+ TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str1 + "> : " + BytesFromString(str1));
+ retVal = false;
+ }
+ if (string.Compare(str2, str2, StringComparison.Ordinal) != 0)
+ {
+ TestLibrary.TestFramework.LogError("003.2", "Comparison not as expected! Actual result: " + string.Compare(str2, str2, StringComparison.Ordinal).ToString() + ", Expected result: 0");
+ TestLibrary.TestFramework.LogInformation("String 1: <" + str2 + "> : " + BytesFromString(str2) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
+ retVal = false;
+ }
+ TestStrings(str1, str2);
+ }
+ }
+ catch (Exception e)
+ {
+ TestLibrary.TestFramework.LogError("003.4", "Unexpected exception: " + e);
+ retVal = false;
+ }
+ return retVal;
+ }
+
+ public bool PosTest4()
+ {
+ bool retVal = true;
+
+ TestLibrary.TestFramework.BeginScenario("PosTest4: Specific regression cases");
+
+ try
+ {
+ CultureInfo oldCi = Utilities.CurrentCulture;
+ Utilities.CurrentCulture = new CultureInfo("hu-HU");
+ retVal &= TestStrings("dzsdzs", "ddzs");
+ Utilities.CurrentCulture = oldCi;
+
+ retVal &= TestStrings("\u00C0nimal", "A\u0300nimal");
+
+ }
+ catch (Exception e)
+ {
+ TestLibrary.TestFramework.LogError("004.2", "Unexpected exception: " + e);
+ retVal = false;
+ }
+ return retVal;
+ }
+
+ public static int Main()
+ {
+ StringCompare test = new StringCompare();
+
+ TestLibrary.TestFramework.BeginTestCase("StringCompare");
+
+ if (test.RunTests())
+ {
+ TestLibrary.TestFramework.EndTestCase();
+ TestLibrary.TestFramework.LogInformation("PASS");
+ return 100;
+ }
+ else
+ {
+ TestLibrary.TestFramework.EndTestCase();
+ TestLibrary.TestFramework.LogInformation("FAIL");
+ return 0;
+ }
+ }
+
+ private bool TestStrings(string str1, string str2)
+ {
+ bool retVal = true;
+
+ int expectValue = PredictValue(str1, str2);
+ int actualValue = String.Compare(str1, str2, StringComparison.Ordinal);
+ if (expectValue != 0) expectValue = expectValue / Math.Abs(expectValue);
+ if (actualValue != 0) actualValue = actualValue / Math.Abs(actualValue);
+
+ if (actualValue != expectValue)
+ {
+ TestLibrary.TestFramework.LogError("001.1", "Comparison not as expected! Actual result: " + actualValue + ", Expected result: " + expectValue);
+ TestLibrary.TestFramework.LogInformation("String 1: <" + str1 + "> : " + BytesFromString(str1) + "\nString 2: <" + str2 + "> : " + BytesFromString(str2));
+ retVal = false;
+ }
+
+ return retVal;
+ }
+
+ int PredictValue(string str1, string str2)
+ {
+ if (str1 == null)
+ {
+ if (str2 == null) return 0;
+ else return -1;
+ }
+ if (str2 == null) return 1;
+
+ for (int i = 0; i < str1.Length; i++)
+ {
+ if (i >= str2.Length) return 1;
+ if ((int)str1[i] > (int)str2[i]) return 1;
+ if ((int)str1[i] < (int)str2[i]) return -1;
+ }
+
+ if (str2.Length > str1.Length) return -1;
+
+ return 0;
+ }
+
+ private static string BytesFromString(string str)
+ {
+ if (str == null) return string.Empty;
+ StringBuilder output = new StringBuilder();
+ for (int i = 0; i < str.Length; i++)
+ {
+ output.Append(Utilities.ByteArrayToString(BitConverter.GetBytes(str[i])));
+ if (i != (str.Length - 1)) output.Append(", ");
+ }
+ return output.ToString();
+ }
+}