예제 #1
0
                public void NullItems_ShouldThrow_ArgumentNullException()
                {
                    // Arrange
                    var builder = new global::HashCode.Builder();

                    // Act & Assert
                    Assert.Throws <ArgumentNullException>(() => builder.Add <object>((object[])null));
                }
예제 #2
0
                public void AreNullsIncluded_Should_DefaultToTrue()
                {
                    // Arrange
                    // Act
                    var builder = new global::HashCode.Builder();

                    // Assert
                    builder.AreNullsIncluded.Should().BeTrue();
                }
예제 #3
0
                public void ComparerNull_Should_ApplyDefaultOrdering()
                {
                    var builder1 = new global::HashCode.Builder();
                    var builder2 = new global::HashCode.Builder();

                    // Act
                    builder1.AddIgnoreOrder(1, 2);
                    builder2.AddIgnoreOrder(2, 1);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #4
0
                public void WithComparer_Should_ComputeSameHashCodeAsWithExplicitOrderedItems()
                {
                    var builder1 = new global::HashCode.Builder();
                    var builder2 = new global::HashCode.Builder();
                    var comparer = new CallbackComparer <int>((x, y) => (x == y ? 0 : (x < y) ? -1 : +1));

                    // Act
                    builder1.AddIgnoreOrder(comparer, 2, 1);
                    builder2.Add(1, 2);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #5
0
                public void SameItem_Should_ComputeSameHashCode()
                {
                    // Arrange
                    var obj      = "test";
                    var builder1 = new global::HashCode.Builder();
                    var builder2 = new global::HashCode.Builder();

                    // Act
                    builder1.Add(obj);
                    builder2.Add(obj);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #6
0
                public void WithEqualityComparerReturningTheArgumentIntegerValuesModulusByTwoAndAndWithComparer_Should_ComputeTheSameHashCode()
                {
                    var builder1         = new global::HashCode.Builder();
                    var builder2         = new global::HashCode.Builder();
                    var equalityComparer = new CallbackEqualityComparer <int>((x, y) => true, (obj) => obj % 2);
                    var comparer         = new CallbackComparer <int>((x, y) => (x == y ? 0 : (x < y) ? -1 : +1));

                    // Act
                    builder1.AddIgnoreOrder(equalityComparer, comparer, 4, 3);
                    builder2.Add(equalityComparer, 1, 2);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #7
0
                public void WithEqualityComparerAlwaysReturningTheSameHashCode_Should_ComputeTheSameHashCodeForDifferentItems()
                {
                    // Arrange
                    var builder1         = new global::HashCode.Builder();
                    var builder2         = new global::HashCode.Builder();
                    var equalityComparer = new CallbackEqualityComparer <string>((x, y) => true, (obj) => 1337);

                    // Act
                    builder1.Add(equalityComparer, "test", "1");
                    builder2.Add(equalityComparer, "item", "a");

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #8
0
                public void SameItemsInDifferentOrder_Should_ComputeDifferentHashCodes()
                {
                    // Arrange
                    var objs     = new[] { "test", "item" };
                    var builder1 = new global::HashCode.Builder();
                    var builder2 = new global::HashCode.Builder();

                    // Act
                    builder1.Add(objs);
                    builder2.Add(objs.Reverse());

                    // Assert
                    builder1.Build().Should().NotBe(builder2.Build());
                }
예제 #9
0
                public void NullWhileExcludingNulls_Should_ComputeAlwaysTheSameHashCode()
                {
                    var builder1 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };
                    var builder2 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };

                    // Act
                    builder1.Add((object)null);
                    builder2.Add((object)null);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #10
0
                public void NullWhileIncludingNulls_Should_BeDifferentFromNullWhileExcludingNulls()
                {
                    // Arrange
                    var builder1 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = true
                    };
                    var builder2 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };

                    // Act
                    builder1.Add((object)null);
                    builder2.Add((object)null);

                    // Assert
                    builder1.Build().Should().NotBe(builder2.Build());
                }
예제 #11
0
                public void WhileExcludingNullsAddNullAndNotNullItem_Should_ComputeSameHashCodeWithReversedItemOrder()
                {
                    // Arrange
                    var obj      = "test";
                    var builder1 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };
                    var builder2 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };

                    // Act
                    builder1.Add((object)null, obj);
                    builder2.Add(obj, (object)null);

                    // Assert
                    builder1.Build().Should().Be(builder2.Build());
                }
예제 #12
0
                public void ItemAndNullWhileIncludingNulls_Should_ComputeDifferentHashCodeFromItemAndNullWhlieExcludingNulls()
                {
                    // Arrange
                    var obj      = "test";
                    var builder1 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = true
                    };
                    var builder2 = new global::HashCode.Builder()
                    {
                        AreNullsIncluded = false
                    };

                    // Act
                    builder1.Add(obj, (object)null);
                    builder2.Add(obj, (object)null);

                    // Assert
                    builder1.Build().Should().NotBe(builder2.Build());
                }
예제 #13
0
            public void BuilderPattern_Should_Succeed()
            {
                // Arrange
                var builder1 = new global::HashCode.Builder();
                var builder2 = new global::HashCode.Builder();

                // Act
                var hashCode1 = builder1
                                .Add(1)
                                .Add(2)
                                .Add(3, 4)
                                .AddIgnoreOrder(6, 5)
                                .Build();

                builder2.Add(1);
                builder2.Add(2);
                builder2.Add(3, 4);
                builder2.Add(5, 6);

                // Assert
                hashCode1.Should().Be(builder2.Build());
            }