public void ClassWithCustomEquals()
        {
            var point1 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };
            var point2 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };

            Assert.IsTrue(point1.Equals(point2));
        }
        public void ClassWithCustomEqualsReferenceEquals()
        {
            var point1 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };
            var point2 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };

            Assert.IsFalse(ReferenceEquals(point1, point2));

            var point3 = point1;

            Assert.IsTrue(ReferenceEquals(point1, point3));
        }
        public void ClassWithCustomEqualsHashSet()
        {
            var point1 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };
            var point2 = new EqualsMethod.CustomEquals.PointClass {
                X = 1, Y = 2
            };

            // overridden Equals method returns true
            Assert.IsTrue(point1.Equals(point2));
            // default GetHashCode method returns different values
            Assert.IsFalse(point1.GetHashCode() == point2.GetHashCode());

            var set = new HashSet <EqualsMethod.CustomEquals.PointClass>();

            set.Add(point1);
            set.Add(point2);
            // HashSet adds both points because of different GetHashCode value
            Assert.IsFalse(set.Count == 1);
        }