Skip to content

Commit ca4a793

Browse files
committed
Add tests for different collections' hash codes
1 parent 8e8d0f0 commit ca4a793

File tree

7 files changed

+96
-0
lines changed

7 files changed

+96
-0
lines changed

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/Array/ArrayEqualityComparer_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
3030
Assert.StrictEqual(hashCode1, hashCode2);
3131
}
3232

33+
[Theory]
34+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
35+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfArray<T> input1, CaseParamOfArray<T> input2)
36+
{
37+
var comparer = BuildComparer();
38+
var hashCode1 = comparer.GetHashCode(input1.Items);
39+
var hashCode2 = comparer.GetHashCode(input2.Items);
40+
Assert.NotStrictEqual(hashCode1, hashCode2);
41+
}
42+
3343
[Theory]
3444
[MemberData(nameof(InputsAreEqualCases))]
3545
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfArray<T> input1, CaseParamOfArray<T> input2)
@@ -76,6 +86,10 @@ public static TheoryData<CaseParamOfArray<T>, CaseParamOfArray<T>> InputsAreEqua
7686
=>
7787
MapEqualsCases(CaseSources.EqualArrays<T>());
7888

89+
public static TheoryData<CaseParamOfArray<T>, CaseParamOfArray<T>> GetHashCode_InputsAreNotEqualCases()
90+
=>
91+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
92+
7993
public static TheoryData<CaseParamOfArray<T>, CaseParamOfArray<T>> Equals_InputsAreNotEqualCases()
8094
=>
8195
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Collections.Generic;
2+
3+
namespace PrimeFuncPack.Collections.Generic.EqualityComparers.Tests;
4+
5+
partial class CaseSources
6+
{
7+
// Here it is assumed a small set consisting of short arrays
8+
// should lead to different hash codes with no collisions
9+
internal static IEnumerable<(T[]? X, T[]? Y)> GetHashCode_NotEqualArrays<T>()
10+
=>
11+
InnerNotEqualArrays<T>();
12+
}

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/ImmutableArray/ImmutableArrayEqualityComparer_Nonnull_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
2525
Assert.StrictEqual(hashCode1, hashCode2);
2626
}
2727

28+
[Theory]
29+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
30+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfImmutableArray<T> input1, CaseParamOfImmutableArray<T> input2)
31+
{
32+
var comparer = BuildComparer();
33+
var hashCode1 = comparer.GetHashCode(input1.Items);
34+
var hashCode2 = comparer.GetHashCode(input2.Items);
35+
Assert.NotStrictEqual(hashCode1, hashCode2);
36+
}
37+
2838
[Theory]
2939
[MemberData(nameof(InputsAreEqualCases))]
3040
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfImmutableArray<T> input1, CaseParamOfImmutableArray<T> input2)
@@ -47,6 +57,10 @@ public static TheoryData<CaseParamOfImmutableArray<T>, CaseParamOfImmutableArray
4757
=>
4858
MapEqualsCases(CaseSources.EqualArrays<T>());
4959

60+
public static TheoryData<CaseParamOfImmutableArray<T>, CaseParamOfImmutableArray<T>> GetHashCode_InputsAreNotEqualCases()
61+
=>
62+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
63+
5064
public static TheoryData<CaseParamOfImmutableArray<T>, CaseParamOfImmutableArray<T>> Equals_InputsAreNotEqualCases()
5165
=>
5266
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/ImmutableArray/ImmutableArrayEqualityComparer_Nullable_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
3333
Assert.StrictEqual(hashCode1, hashCode2);
3434
}
3535

36+
[Theory]
37+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
38+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfImmutableArrayNullable<T> input1, CaseParamOfImmutableArrayNullable<T> input2)
39+
{
40+
var comparer = BuildComparer();
41+
var hashCode1 = comparer.GetHashCode(input1.Items);
42+
var hashCode2 = comparer.GetHashCode(input2.Items);
43+
Assert.NotStrictEqual(hashCode1, hashCode2);
44+
}
45+
3646
[Theory]
3747
[MemberData(nameof(InputsAreEqualCases))]
3848
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfImmutableArrayNullable<T> input1, CaseParamOfImmutableArrayNullable<T> input2)
@@ -55,6 +65,10 @@ public static TheoryData<CaseParamOfImmutableArrayNullable<T>, CaseParamOfImmuta
5565
=>
5666
MapEqualsCases(CaseSources.EqualArrays<T>());
5767

68+
public static TheoryData<CaseParamOfImmutableArrayNullable<T>, CaseParamOfImmutableArrayNullable<T>> GetHashCode_InputsAreNotEqualCases()
69+
=>
70+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
71+
5872
public static TheoryData<CaseParamOfImmutableArrayNullable<T>, CaseParamOfImmutableArrayNullable<T>> Equals_InputsAreNotEqualCases()
5973
=>
6074
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/List/ListEqualityComparer_IList_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
2424
Assert.StrictEqual(hashCode1, hashCode2);
2525
}
2626

27+
[Theory]
28+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
29+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfIList<T> input1, CaseParamOfIList<T> input2)
30+
{
31+
var comparer = BuildComparer();
32+
var hashCode1 = comparer.GetHashCode(input1.Items);
33+
var hashCode2 = comparer.GetHashCode(input2.Items);
34+
Assert.NotStrictEqual(hashCode1, hashCode2);
35+
}
36+
2737
[Theory]
2838
[MemberData(nameof(InputsAreEqualCases))]
2939
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfIList<T> input1, CaseParamOfIList<T> input2)
@@ -46,6 +56,10 @@ public static TheoryData<CaseParamOfIList<T>, CaseParamOfIList<T>> InputsAreEqua
4656
=>
4757
MapEqualsCases(CaseSources.EqualArrays<T>());
4858

59+
public static TheoryData<CaseParamOfIList<T>, CaseParamOfIList<T>> GetHashCode_InputsAreNotEqualCases()
60+
=>
61+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
62+
4963
public static TheoryData<CaseParamOfIList<T>, CaseParamOfIList<T>> Equals_InputsAreNotEqualCases()
5064
=>
5165
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/List/ListEqualityComparer_List_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
2424
Assert.StrictEqual(hashCode1, hashCode2);
2525
}
2626

27+
[Theory]
28+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
29+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfList<T> input1, CaseParamOfList<T> input2)
30+
{
31+
var comparer = BuildComparer();
32+
var hashCode1 = comparer.GetHashCode(input1.Items);
33+
var hashCode2 = comparer.GetHashCode(input2.Items);
34+
Assert.NotStrictEqual(hashCode1, hashCode2);
35+
}
36+
2737
[Theory]
2838
[MemberData(nameof(InputsAreEqualCases))]
2939
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfList<T> input1, CaseParamOfList<T> input2)
@@ -46,6 +56,10 @@ public static TheoryData<CaseParamOfList<T>, CaseParamOfList<T>> InputsAreEqualC
4656
=>
4757
MapEqualsCases(CaseSources.EqualArrays<T>());
4858

59+
public static TheoryData<CaseParamOfList<T>, CaseParamOfList<T>> GetHashCode_InputsAreNotEqualCases()
60+
=>
61+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
62+
4963
public static TheoryData<CaseParamOfList<T>, CaseParamOfList<T>> Equals_InputsAreNotEqualCases()
5064
=>
5165
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());

src/collections-generic-equalitycomparers/Collections.Generic.EqualityComparers.Tests/ReadOnlyList/ReadOnlyListEqualityComparer_TestsBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ public static void Test_GetHashCode_InputsAreEqual_ExpectHashCodesAreEqual(CaseP
3030
Assert.StrictEqual(hashCode1, hashCode2);
3131
}
3232

33+
[Theory]
34+
[MemberData(nameof(GetHashCode_InputsAreNotEqualCases))]
35+
public static void Test_GetHashCode_InputsAreNotEqual_ExpectHashCodesAreNotEqual(CaseParamOfIReadOnlyList<T> input1, CaseParamOfIReadOnlyList<T> input2)
36+
{
37+
var comparer = BuildComparer();
38+
var hashCode1 = comparer.GetHashCode(input1.Items);
39+
var hashCode2 = comparer.GetHashCode(input2.Items);
40+
Assert.NotStrictEqual(hashCode1, hashCode2);
41+
}
42+
3343
[Theory]
3444
[MemberData(nameof(InputsAreEqualCases))]
3545
public static void Test_Equals_InputsAreEqual_ExpectTrue(CaseParamOfIReadOnlyList<T> input1, CaseParamOfIReadOnlyList<T> input2)
@@ -76,6 +86,10 @@ public static TheoryData<CaseParamOfIReadOnlyList<T>, CaseParamOfIReadOnlyList<T
7686
=>
7787
MapEqualsCases(CaseSources.EqualArrays<T>());
7888

89+
public static TheoryData<CaseParamOfIReadOnlyList<T>, CaseParamOfIReadOnlyList<T>> GetHashCode_InputsAreNotEqualCases()
90+
=>
91+
MapEqualsCases(CaseSources.GetHashCode_NotEqualArrays<T>());
92+
7993
public static TheoryData<CaseParamOfIReadOnlyList<T>, CaseParamOfIReadOnlyList<T>> Equals_InputsAreNotEqualCases()
8094
=>
8195
MapEqualsCases(CaseSources.Equals_NotEqualArrays<T>());

0 commit comments

Comments
 (0)