⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comparerstests.cs

📁 C#写的类似于STL的集合类,首先是C#编写,可以用于.net变程.
💻 CS
📖 第 1 页 / 共 2 页
字号:
    }

    /// <summary>
    /// Tests for the Comparers class
    /// </summary>
    [TestFixture]
    public class ComparersTests
    {
        // Comparison function 
        public static int CompareOddEven(int e1, int e2)
        {
            if ((e1 & 1) == 1 && (e2 & 1) == 0)
                return -1;
            else if ((e1 & 1) == 0 && (e2 & 1) == 1)
                return 1;
            else if (e1 < e2)
                return -1;
            else if (e1 > e2)
                return 1;
            else
                return 0;
        }

        public static bool FirstCharEqual(string s1, string s2)
        {
            if (s1 == null || s2 == null || s1.Length == 0 || s2.Length == 0) {
                if (s1 != null && s1.Length > 0)
                    return false;
                if (s2 != null && s2.Length > 0)
                    return false;
                return true;
            }

            return s1[0] == s2[0];
        }



        [Test]
        public void ComparerFromComparison()
        {
            IComparer<int> comparer = Comparers.ComparerFromComparison<int>(CompareOddEven);

            Assert.IsTrue(comparer.Compare(7, 6) < 0);
            Assert.IsTrue(comparer.Compare(7, 8) < 0);
            Assert.IsTrue(comparer.Compare(12, 11) > 0);
            Assert.IsTrue(comparer.Compare(12, 143) > 0);
            Assert.IsTrue(comparer.Compare(5, 7) < 0);
            Assert.IsTrue(comparer.Compare(9, 5) > 0);
            Assert.IsTrue(comparer.Compare(6, 8) < 0);
            Assert.IsTrue(comparer.Compare(14, -8) > 0);
            Assert.IsTrue(comparer.Compare(0, 0) == 0);
            Assert.IsTrue(comparer.Compare(-3, -3) == 0);
        }

        [Test]
        public void ComparerKeyValueFromComparerKey()
        {
            IComparer<KeyValuePair<int, string>> comparer = Comparers.ComparerKeyValueFromComparerKey<int, string>(new GOddEvenComparer());

            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "foo"), new KeyValuePair<int, string>(6, "bar")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "bar"), new KeyValuePair<int, string>(8, "foo")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "baz"), new KeyValuePair<int, string>(11, "baz")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "a"), new KeyValuePair<int, string>(143, "foo")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(5, "b"), new KeyValuePair<int, string>(7, "d")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(9, "c"), new KeyValuePair<int, string>(5, "c")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(6, "e"), new KeyValuePair<int, string>(8, "b")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(14, "f"), new KeyValuePair<int, string>(-8, "a")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(0, "g"), new KeyValuePair<int, string>(0, "r")) == 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(-3, "f")) == 0);
        }

        [Test]
        public void EqualityComparerKeyValueFromComparerKey()
        {
            IEqualityComparer<KeyValuePair<int, string>> comparer = Comparers.EqualityComparerKeyValueFromComparerKey<int, string>(new GOddEvenEqualityComparer());

            Assert.IsTrue(comparer.Equals(new KeyValuePair<int, string>(0, "g"), new KeyValuePair<int, string>(2, "r")));
            Assert.IsTrue(comparer.Equals(new KeyValuePair<int, string>(-1, "g"), new KeyValuePair<int, string>(7, "w")));
            Assert.IsFalse(comparer.Equals(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(4, "q")));
        }

        [Test]
        public void ComparerPairFromKeyValueComparers()
        {
            IComparer<KeyValuePair<int, string>> comparer = Comparers.ComparerPairFromKeyValueComparers<int, string>(new GOddEvenComparer(), StringComparer.InvariantCultureIgnoreCase);

            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "foo"), new KeyValuePair<int, string>(6, "bar")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "bar"), new KeyValuePair<int, string>(8, "foo")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "baz"), new KeyValuePair<int, string>(11, "baz")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "a"), new KeyValuePair<int, string>(143, "foo")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(5, "b"), new KeyValuePair<int, string>(7, "d")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(9, "c"), new KeyValuePair<int, string>(5, "c")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(6, "e"), new KeyValuePair<int, string>(8, "b")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(14, "f"), new KeyValuePair<int, string>(-8, "a")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(0, "g"), new KeyValuePair<int, string>(0, "r")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(-3, "f")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(0, "g"), new KeyValuePair<int, string>(0, "R")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(-3, "F")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(0, "Foo"), new KeyValuePair<int, string>(0, "foo")) == 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(-3, "q")) == 0);
        }

        [Test]
        public void ComparerKeyValueFromComparisonKey()
        {
            IComparer<KeyValuePair<int, string>> comparer = Comparers.ComparerKeyValueFromComparisonKey<int, string>(CompareOddEven);

            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "foo"), new KeyValuePair<int, string>(6, "bar")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(7, "bar"), new KeyValuePair<int, string>(8, "foo")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "baz"), new KeyValuePair<int, string>(11, "baz")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(12, "a"), new KeyValuePair<int, string>(143, "foo")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(5, "b"), new KeyValuePair<int, string>(7, "d")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(9, "c"), new KeyValuePair<int, string>(5, "c")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(6, "e"), new KeyValuePair<int, string>(8, "b")) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(14, "f"), new KeyValuePair<int, string>(-8, "a")) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(0, "g"), new KeyValuePair<int, string>(0, "r")) == 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<int, string>(-3, "q"), new KeyValuePair<int, string>(-3, "f")) == 0);
        }

        [Test]
        public void DefaultComparerNonGeneric()
        {
            IComparer<OddEvenComparable> comparer = Comparers.DefaultComparer<OddEvenComparable>();

            Assert.IsTrue(comparer.Compare(new OddEvenComparable(7), new OddEvenComparable(6)) < 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(7), new OddEvenComparable(8)) < 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(12), new OddEvenComparable(11)) > 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(12), new OddEvenComparable(143)) > 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(5), new OddEvenComparable(7)) < 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(9), new OddEvenComparable(5)) > 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(6), new OddEvenComparable(8)) < 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(14), new OddEvenComparable(-8)) > 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(0), new OddEvenComparable(0)) == 0);
            Assert.IsTrue(comparer.Compare(new OddEvenComparable(-3), new OddEvenComparable(-3)) == 0);
        }

        [Test]
        public void DefaultComparerGeneric()
        {
            IComparer<GOddEvenComparable> comparer = Comparers.DefaultComparer<GOddEvenComparable>();

            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(7), new GOddEvenComparable(6)) < 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(7), new GOddEvenComparable(8)) < 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(12), new GOddEvenComparable(11)) > 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(12), new GOddEvenComparable(143)) > 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(5), new GOddEvenComparable(7)) < 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(9), new GOddEvenComparable(5)) > 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(6), new GOddEvenComparable(8)) < 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(14), new GOddEvenComparable(-8)) > 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(0), new GOddEvenComparable(0)) == 0);
            Assert.IsTrue(comparer.Compare(new GOddEvenComparable(-3), new GOddEvenComparable(-3)) == 0);
        }

        [Test]
        public void DefaultKeyValueComparerNonGeneric()
        {
            IComparer<KeyValuePair<OddEvenComparable, short>> comparer = Comparers.DefaultKeyValueComparer<OddEvenComparable, short>();

            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(7), 12), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(6), 19)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(7), 133), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(8), 1)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(12), 34), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(11), 3)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(12), 8), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(143), 6)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(5), 1), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(7), 0)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(9), 3), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(5), 23)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(6), 5), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(8), 4)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(14), 1), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(-8), 0)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(0), 4), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(0), 17)) == 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(-3), 2), new KeyValuePair<OddEvenComparable, short>(new OddEvenComparable(-3), 1)) == 0);
        }

        [Test]
        public void DefaultKeyValueComparerGeneric()
        {
            IComparer<KeyValuePair<GOddEvenComparable, short>> comparer = Comparers.DefaultKeyValueComparer<GOddEvenComparable, short>();

            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(7), 12), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(6), 19)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(7), 133), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(8), 1)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(12), 34), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(11), 3)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(12), 8), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(143), 6)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(5), 1), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(7), 0)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(9), 3), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(5), 23)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(6), 5), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(8), 4)) < 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(14), 1), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(-8), 0)) > 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(0), 4), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(0), 17)) == 0);
            Assert.IsTrue(comparer.Compare(new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(-3), 2), new KeyValuePair<GOddEvenComparable, short>(new GOddEvenComparable(-3), 1)) == 0);
        }

        [Test]
        [ExpectedException(typeof(InvalidOperationException), "Type \"Wintellect.PowerCollections.Tests.Unorderable\" does not implement IComparable<Wintellect.PowerCollections.Tests.Unorderable> or IComparable.")]
        public void UnorderableType2()
        {
            IComparer<Unorderable> ordering = Comparers.DefaultComparer<Unorderable>();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -