Example #1
0
        private void TestObjectWithIsNull()
        {
            var obj1 = new object();
            var obj2 = new object();
            var obj3 = obj1;

            var comparer = new ClassEqualityComparer <object>(equals: ReferenceEquals, getHashCode: obj => obj.GetHashCode(), isNull: obj => ReferenceEquals(obj, obj2));

            TestInternal(expected: true, v1: null, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: obj1, comparer: comparer);
            TestInternal(expected: true, v1: null, v2: obj2, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: obj3, comparer: comparer);

            TestInternal(expected: false, v1: obj1, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: obj1, v2: obj1, comparer: comparer);
            TestInternal(expected: false, v1: obj1, v2: obj2, comparer: comparer);
            TestInternal(expected: true, v1: obj1, v2: obj3, comparer: comparer);

            TestInternal(expected: true, v1: obj2, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: obj2, v2: obj1, comparer: comparer);
            TestInternal(expected: true, v1: obj2, v2: obj2, comparer: comparer);
            TestInternal(expected: false, v1: obj2, v2: obj3, comparer: comparer);

            TestInternal(expected: false, v1: obj3, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: obj3, v2: obj1, comparer: comparer);
            TestInternal(expected: false, v1: obj3, v2: obj2, comparer: comparer);
            TestInternal(expected: true, v1: obj3, v2: obj3, comparer: comparer);
        }
        public void CompareClasses()
        {
            var comparerUnderTest = new ClassEqualityComparer();

            var c1d1 = new DummyClass1();
            var c1d2 = new DummyClass1();
            var c2d1 = new DummyClass2();
            var c2d2 = new DummyClass2();
            var c3d1 = new DummyClass3();

            Assert.IsTrue(comparerUnderTest.Equals(c1d1, c1d2));
            Assert.IsTrue(comparerUnderTest.Equals(c2d1, c2d2));
            Assert.IsFalse(comparerUnderTest.Equals(c1d1, c2d2));
            Assert.IsFalse(comparerUnderTest.Equals(c1d1, c2d1));
            Assert.IsFalse(comparerUnderTest.Equals(c1d1, c3d1));
            Assert.IsFalse(comparerUnderTest.Equals(c2d1, c3d1));
            Assert.IsFalse(comparerUnderTest.Equals(c2d2, c3d1));
        }
Example #3
0
        private void TestInternal <T>(bool expected, T v1, T v2, ClassEqualityComparer <T> comparer) where T : class
        {
            if ((expected) && (comparer.GetHashCode(obj: v1) != comparer.GetHashCode(obj: v2)))
            {
                var xStr = (v1 is null) ? "null" : $@"""{v1}""";
                var yStr = (v2 is null) ? "null" : $@"""{v2}""";

                Assert.Fail($@"{nameof(StructEqualityComparer.GetHashCode)}(obj: {xStr}) != {nameof(StructEqualityComparer.GetHashCode)}(obj: {yStr})");
            }

            if (comparer.Equals(x: v1, y: v2) != expected)
            {
                var xStr = (v1 is null) ? "null" : $@"""{v1}""";
                var yStr = (v2 is null) ? "null" : $@"""{v2}""";

                Assert.Fail($@"{nameof(StructEqualityComparer.Equals)}(x: {xStr}, y: {yStr}) != {expected}");
            }
        }
Example #4
0
        private void TestStringTrimIgnoreCaseWithBlankIsNull()
        {
            var empty = string.Empty;
            var blank = @" ";
            var lower = @"test";
            var upper = @"TEST";

            var comparer = new ClassEqualityComparer <string>((v1, v2) => string.Equals(v1.Trim(), v2.Trim(), StringComparison.OrdinalIgnoreCase), getHashCode: (obj) => obj.Trim().ToUpper().GetHashCode(), isNull: (obj) => string.IsNullOrWhiteSpace(obj));

            TestInternal(expected: true, v1: null, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: null, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: null, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: upper, comparer: comparer);

            TestInternal(expected: true, v1: empty, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: empty, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: empty, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: empty, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: empty, v2: upper, comparer: comparer);

            TestInternal(expected: true, v1: blank, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: blank, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: blank, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: blank, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: blank, v2: upper, comparer: comparer);

            TestInternal(expected: false, v1: lower, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: lower, v2: empty, comparer: comparer);
            TestInternal(expected: false, v1: lower, v2: blank, comparer: comparer);
            TestInternal(expected: true, v1: lower, v2: lower, comparer: comparer);
            TestInternal(expected: true, v1: lower, v2: upper, comparer: comparer);

            TestInternal(expected: false, v1: upper, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: upper, v2: empty, comparer: comparer);
            TestInternal(expected: false, v1: upper, v2: blank, comparer: comparer);
            TestInternal(expected: true, v1: upper, v2: lower, comparer: comparer);
            TestInternal(expected: true, v1: upper, v2: upper, comparer: comparer);
        }
Example #5
0
        private void TestStringReferenceEqualsWithBlankIsNull()
        {
            var empty = string.Empty;
            var blank = @" ";
            var lower = @"test";
            var upper = @"TEST";

            var comparer = new ClassEqualityComparer <string>(ReferenceEquals, getHashCode: (obj) => RuntimeHelpers.GetHashCode(obj), isNull: (obj) => string.IsNullOrWhiteSpace(obj));

            TestInternal(expected: true, v1: null, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: null, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: null, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: null, v2: upper, comparer: comparer);

            TestInternal(expected: true, v1: empty, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: empty, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: empty, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: empty, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: empty, v2: upper, comparer: comparer);

            TestInternal(expected: true, v1: blank, v2: null, comparer: comparer);
            TestInternal(expected: true, v1: blank, v2: empty, comparer: comparer);
            TestInternal(expected: true, v1: blank, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: blank, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: blank, v2: upper, comparer: comparer);

            TestInternal(expected: false, v1: lower, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: lower, v2: empty, comparer: comparer);
            TestInternal(expected: false, v1: lower, v2: blank, comparer: comparer);
            TestInternal(expected: true, v1: lower, v2: lower, comparer: comparer);
            TestInternal(expected: false, v1: lower, v2: upper, comparer: comparer);

            TestInternal(expected: false, v1: upper, v2: null, comparer: comparer);
            TestInternal(expected: false, v1: upper, v2: empty, comparer: comparer);
            TestInternal(expected: false, v1: upper, v2: blank, comparer: comparer);
            TestInternal(expected: false, v1: upper, v2: lower, comparer: comparer);
            TestInternal(expected: true, v1: upper, v2: upper, comparer: comparer);
        }
        public void CompareHashes()
        {
            var comparerUnderTest = new ClassEqualityComparer();

            var c1d1 = new DummyClass1();
            var c1d2 = new DummyClass1();
            var c2d1 = new DummyClass2();
            var c2d2 = new DummyClass2();
            var c3d1 = new DummyClass3();

            var c1d1Hash = comparerUnderTest.GetHashCode(c1d1);
            var c1d2Hash = comparerUnderTest.GetHashCode(c1d2);
            var c2d1Hash = comparerUnderTest.GetHashCode(c2d1);
            var c2d2Hash = comparerUnderTest.GetHashCode(c2d2);
            var c3d1Hash = comparerUnderTest.GetHashCode(c3d1);

            Assert.AreEqual(c1d1Hash, c1d2Hash);
            Assert.AreEqual(c2d1Hash, c2d2Hash);
            Assert.AreNotEqual(c1d1Hash, c2d1Hash);
            Assert.AreNotEqual(c1d2Hash, c2d1Hash);
            Assert.AreNotEqual(c1d1Hash, c3d1Hash);
            Assert.AreNotEqual(c2d1Hash, c3d1Hash);
        }