public void CanCreateEqualityComparer()
        {
            //-- arrange

            var typeFactoryUnderTest = CreateFactoryUnderTest();
            IEqualityComparerObjectFactory objectFactoryUnderTest = typeFactoryUnderTest;

            //-- act

            typeFactoryUnderTest.ImplementEqualityComparer(typeof(ASimplestClass));
            IEqualityComparer <ASimplestClass> comparer = objectFactoryUnderTest.GetEqualityComparer <ASimplestClass>();

            //-- assert

            comparer.Should().NotBeNull();
        }
        public void CanCompareEquality_AFlatStructWithFields(
            int yNumber, string yText, string yTimeStamp, DayOfWeek yDay, bool expectedResult)
        {
            //-- arrange

            var typeFactoryUnderTest = CreateFactoryUnderTest();

            typeFactoryUnderTest.ImplementEqualityComparer(typeof(ASimplestClass));

            IEqualityComparerObjectFactory objectFactoryUnderTest = typeFactoryUnderTest;
            var comparer = objectFactoryUnderTest.GetEqualityComparer <AFlatStructWithFields>();

            var x = new AFlatStructWithFields {
                Number    = 123,
                Text      = "ABC",
                TimeStamp = new DateTime(2010, 10, 10),
                Day       = DayOfWeek.Saturday
            };

            var y = new AFlatStructWithFields {
                Number    = yNumber,
                Text      = yText,
                TimeStamp = DateTime.ParseExact(yTimeStamp, "yyyy-MM-dd", CultureInfo.InvariantCulture),
                Day       = yDay
            };

            //-- act

            var actualResult = comparer.Equals(x, y);
            var xHashCode    = comparer.GetHashCode(x);
            var yHashCode    = comparer.GetHashCode(y);

            //-- assert

            actualResult.Should().Be(expectedResult);

            if (expectedResult)
            {
                yHashCode.Should().Be(xHashCode);
            }
        }