public static void Equals___Should_return_true___When_parameters_are_null()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            // Act
            var actual = systemUnderTest.Equals(null, null);

            // Assert
            actual.AsTest().Must().BeTrue();
        }
        public static void Equals___Should_return_true___When_parameters_are_equal_and_have_the_same_versions()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var type = A.Dummy <Type>();

            // Act
            var actual = systemUnderTest.Equals(type, type);

            // Assert
            actual.AsTest().Must().BeTrue();
        }
        public static void GetHashCode___Should_return_the_same_hash_code_for_null___When_called()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var expected = systemUnderTest.GetHashCode(null);

            // Act
            var actual = systemUnderTest.GetHashCode(null);

            // Assert
            actual.AsTest().Must().BeEqualTo(expected);
        }
        public static void Equals___Should_return_false___When_parameters_are_not_equal()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var type1 = A.Dummy <Type>();
            var type2 = A.Dummy <Type>().ThatIsNot(type1);

            // Act
            var actual = systemUnderTest.Equals(type1, type2);

            // Assert
            actual.AsTest().Must().BeFalse();
        }
        public static void Equals___Should_return_false___When_parameter_x_is_null_and_parameter_y_is_not_null_and_vice_versa()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var type = A.Dummy <Type>();

            // Act
            var actual1 = systemUnderTest.Equals(type, null);
            var actual2 = systemUnderTest.Equals(null, type);

            // Assert
            actual1.AsTest().Must().BeFalse();
            actual2.AsTest().Must().BeFalse();
        }
        public static void Equals___Should_return_true___When_parameters_are_equal_and_have_different_versions()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var oldConditionsAssembly = TypeGenerator.LoadOlderVersionOfConditions();

            var type1 = typeof(Conditions.Condition);
            var type2 = oldConditionsAssembly.GetTypes().Single(_ => _.Name == "Condition");

            // Act
            var actual = systemUnderTest.Equals(type1, type2);

            // Assert
            actual.AsTest().Must().BeTrue();
        }
        public static void GetHashCode___Should_return_the_same_hash_code_for_representations_that_are_equal___When_called()
        {
            // Arrange
            var systemUnderTest = new VersionlessTypeEqualityComparer();

            var oldConditionsAssembly = TypeGenerator.LoadOlderVersionOfConditions();

            var types = new[]
            {
                typeof(Conditions.Condition),
                oldConditionsAssembly.GetTypes().Single(_ => _.Name == "Condition"),
            };

            // Act
            var actual = types.Select(_ => systemUnderTest.GetHashCode(_)).ToList();

            // Assert
            actual.Distinct().AsTest().Must().HaveCount(1);
        }