public void TestCollationKey()
        {
            if (source.Length == 0)
            {
                Errln("CollationMonkeyTest.TestCollationKey(): source is empty - ICU_DATA not set or data missing?");
                return;
            }
            Collator myPrimaryCollator;
            Collator mySecondaryCollator;
            Collator myTertiaryCollator;

            try
            {
                Collator myCollator = Collator.GetInstance(new CultureInfo("en-CA"));
                myCollator.Freeze();

                myPrimaryCollator          = myCollator.CloneAsThawed();
                myPrimaryCollator.Strength = (Collator.Primary);
                myPrimaryCollator.Freeze();

                mySecondaryCollator          = myPrimaryCollator.CloneAsThawed();
                mySecondaryCollator.Strength = (Collator.Secondary);
                mySecondaryCollator.Freeze();

                myTertiaryCollator          = mySecondaryCollator.CloneAsThawed();
                myTertiaryCollator.Strength = (Collator.Tertiary);
                myTertiaryCollator.Freeze();
            }
            catch (Exception e)
            {
                Warnln("ERROR: in creation of collator of ENGLISH locale");
                return;
            }

            Random rand = CreateRandom(); // use test framework's random seed
            int    s    = rand.Next(0x7fff) % source.Length;
            int    t    = rand.Next(0x7fff) % source.Length;
            int    slen = Math.Abs(rand.Next(0x7fff) % source.Length - source.Length) % source.Length;
            int    tlen = Math.Abs(rand.Next(0x7fff) % source.Length - source.Length) % source.Length;
            String subs = source.Substring(Math.Min(s, slen), Math.Min(s + slen, source.Length) - Math.Min(s, slen)); // ICU4N: Corrected 2nd parameter
            String subt = source.Substring(Math.Min(t, tlen), Math.Min(t + tlen, source.Length) - Math.Min(t, tlen)); // ICU4N: Corrected 2nd parameter

            CollationKey collationKey1, collationKey2;

            collationKey1 = myTertiaryCollator.GetCollationKey(subs);
            collationKey2 = myTertiaryCollator.GetCollationKey(subt);
            int result    = collationKey1.CompareTo(collationKey2); // Tertiary
            int revResult = collationKey2.CompareTo(collationKey1); // Tertiary

            Report(subs, subt, result, revResult);

            collationKey1 = mySecondaryCollator.GetCollationKey(subs);
            collationKey2 = mySecondaryCollator.GetCollationKey(subt);
            result        = collationKey1.CompareTo(collationKey2); // Secondary
            revResult     = collationKey2.CompareTo(collationKey1); // Secondary
            Report(subs, subt, result, revResult);

            collationKey1 = myPrimaryCollator.GetCollationKey(subs);
            collationKey2 = myPrimaryCollator.GetCollationKey(subt);
            result        = collationKey1.CompareTo(collationKey2); // Primary
            revResult     = collationKey2.CompareTo(collationKey1); // Primary
            Report(subs, subt, result, revResult);

            String msg    = "";
            String addOne = subs + (0xE000).ToString(CultureInfo.InvariantCulture);

            collationKey1 = myPrimaryCollator.GetCollationKey(subs);
            collationKey2 = myPrimaryCollator.GetCollationKey(addOne);
            result        = collationKey1.CompareTo(collationKey2);
            if (result != -1)
            {
                msg += "CollationKey(";
                msg += subs;
                msg += ") .LT. CollationKey(";
                msg += addOne;
                msg += ") Failed.";
                Errln(msg);
            }

            msg    = "";
            result = collationKey2.CompareTo(collationKey1);
            if (result != 1)
            {
                msg += "CollationKey(";
                msg += addOne;
                msg += ") .GT. CollationKey(";
                msg += subs;
                msg += ") Failed.";
                Errln(msg);
            }
        }
        public void TestCompare()
        {
            if (source.Length == 0)
            {
                Errln("CollationMonkeyTest.TestCompare(): source is empty - ICU_DATA not set or data missing?");
                return;
            }

            Collator myPrimaryCollator;
            Collator mySecondaryCollator;
            Collator myTertiaryCollator;

            try
            {
                Collator myCollator = Collator.GetInstance(new CultureInfo("en-CA"));
                myCollator.Freeze();

                myPrimaryCollator          = myCollator.CloneAsThawed();
                myPrimaryCollator.Strength = (Collator.PRIMARY);
                myPrimaryCollator.Freeze();

                mySecondaryCollator          = myPrimaryCollator.CloneAsThawed();
                mySecondaryCollator.Strength = (Collator.SECONDARY);
                mySecondaryCollator.Freeze();

                myTertiaryCollator          = mySecondaryCollator.CloneAsThawed();
                myTertiaryCollator.Strength = (Collator.TERTIARY);
                myTertiaryCollator.Freeze();
            }
            catch (Exception e)
            {
                Warnln("ERROR: in creation of collator of ENGLISH locale");
                return;
            }


            /* Seed the random-number generator with current time so that
             * the numbers will be different every time we run.
             */

            Random rand = CreateRandom(); // use test framework's random seed
            int    s    = rand.Next(0x7fff) % source.Length;
            int    t    = rand.Next(0x7fff) % source.Length;
            int    slen = Math.Abs(rand.Next(0x7fff) % source.Length - source.Length) % source.Length;
            int    tlen = Math.Abs(rand.Next(0x7fff) % source.Length - source.Length) % source.Length;
            String subs = source.Substring(Math.Min(s, slen), Math.Min(s + slen, source.Length) - Math.Min(s, slen)); // ICU4N: Corrected 2nd parameter
            String subt = source.Substring(Math.Min(t, tlen), Math.Min(t + tlen, source.Length) - Math.Min(t, tlen)); // ICU4N: Corrected 2nd parameter

            int result    = myTertiaryCollator.Compare(subs, subt);                                                   // Tertiary
            int revResult = myTertiaryCollator.Compare(subt, subs);                                                   // Tertiary

            Report(subs, subt, result, revResult);

            result    = mySecondaryCollator.Compare(subs, subt); // Secondary
            revResult = mySecondaryCollator.Compare(subt, subs); // Secondary
            Report(subs, subt, result, revResult);

            result    = myPrimaryCollator.Compare(subs, subt); // Primary
            revResult = myPrimaryCollator.Compare(subt, subs); // Primary
            Report(subs, subt, result, revResult);

            String msg    = "";
            String addOne = subs + (0xE000).ToString(CultureInfo.InvariantCulture);

            result = myPrimaryCollator.Compare(subs, addOne);
            if (result != -1)
            {
                msg += "Test : ";
                msg += subs;
                msg += " .LT. ";
                msg += addOne;
                msg += " Failed.";
                Errln(msg);
            }

            msg    = "";
            result = myPrimaryCollator.Compare(addOne, subs);
            if (result != 1)
            {
                msg += "Test : ";
                msg += addOne;
                msg += " .GT. ";
                msg += subs;
                msg += " Failed.";
                Errln(msg);
            }
        }