Skip to content

Commit

Permalink
Merge pull request #88 from RuijieZ/card-group-equality-test
Browse files Browse the repository at this point in the history
Card group equality test
  • Loading branch information
ItalyToast committed Nov 30, 2023
2 parents 9ee4641 + e94d4f9 commit ce6e9d0
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 7 deletions.
125 changes: 125 additions & 0 deletions HandHistories.Objects.UnitTests/Cards/BoardCardsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,131 @@ public class BoardCardsTests
private static Card C5 = new Card("9", "s");
private static Card C6 = new Card("7", "s");


[Test]
public void BoardCardsTest_EqualityTest_WithDefaultComparison_CompareWithSelf_ReturnTrue()
{
BoardCards emptyBoard = BoardCards.FromCards(String.Empty);
BoardCards boardWithFlop = BoardCards.FromCards("AcQsTh");
BoardCards boardWithTurn = BoardCards.FromCards("AcQsTh2h");
BoardCards boardWithRiver = BoardCards.FromCards("AcQsTh2h3d");

Assert.IsTrue(emptyBoard.Equals(emptyBoard));
Assert.IsTrue(boardWithFlop.Equals(boardWithFlop));
Assert.IsTrue(boardWithTurn.Equals(boardWithTurn));
Assert.IsTrue(boardWithRiver.Equals(boardWithRiver));
}

[Test]
public void BoardCardsTest_EqualityTest_WithDefaultComparison_DifferentOrder_ReturnTrue()
{
BoardCards b1 = BoardCards.ForFlop(C1, C2, C3);
BoardCards b2 = BoardCards.ForFlop(C1, C3, C2);
BoardCards b3 = BoardCards.ForFlop(C2, C1, C3);
BoardCards b4 = BoardCards.ForFlop(C2, C3, C1);
BoardCards b5 = BoardCards.ForFlop(C3, C1, C2);
BoardCards b6 = BoardCards.ForFlop(C3, C2, C1);

Assert.IsTrue(b1.Equals(b2));
Assert.IsTrue(b1.Equals(b3));
Assert.IsTrue(b1.Equals(b4));
Assert.IsTrue(b1.Equals(b5));
Assert.IsTrue(b1.Equals(b6));

Assert.IsTrue(b2.Equals(b3));
Assert.IsTrue(b2.Equals(b4));
Assert.IsTrue(b2.Equals(b5));
Assert.IsTrue(b2.Equals(b6));

Assert.IsTrue(b3.Equals(b4));
Assert.IsTrue(b3.Equals(b5));
Assert.IsTrue(b3.Equals(b6));

Assert.IsTrue(b4.Equals(b5));
Assert.IsTrue(b4.Equals(b6));

Assert.IsTrue(b5.Equals(b6));
}

[Test]
public void BoardCardsTest_FlopEqualityTest_WithDefaultComparision_DifferentCards_ReturnsFalse()
{
BoardCards b1 = BoardCards.ForFlop(C1, C2, C3);
BoardCards b2 = BoardCards.ForFlop(C1, C2, C4);
BoardCards b3 = BoardCards.ForFlop(C1, C3, C4);
BoardCards b4 = BoardCards.ForFlop(C2, C3, C4);

Assert.IsFalse(b1.Equals(b2));
Assert.IsFalse(b1.Equals(b3));
Assert.IsFalse(b1.Equals(b4));
Assert.IsFalse(b2.Equals(b3));
Assert.IsFalse(b2.Equals(b4));
Assert.IsFalse(b3.Equals(b4));
}

[Test]
public void BoardCardsTest_TurnEqualityTest_WithDefaultComparision_ReturnsTrue()
{
BoardCards b1 = BoardCards.ForTurn(C1, C2, C3, C4);
BoardCards b2 = BoardCards.ForTurn(C1, C3, C2, C4);
BoardCards b3 = BoardCards.ForTurn(C3, C2, C1, C4);

Assert.IsTrue(b1.Equals(b2));
Assert.IsTrue(b2.Equals(b3));
Assert.IsTrue(b1.Equals(b3));
}

[Test]
public void BoardCardsTest_TurnEqualityTest_WithDefaultComparision_DifferentCards_ReturnsFalse()
{
BoardCards b1 = BoardCards.ForTurn(C1, C2, C3, C4);
BoardCards b2 = BoardCards.ForTurn(C1, C2, C3, C5);
BoardCards b3 = BoardCards.ForTurn(C1, C2, C5, C4);

Assert.IsFalse(b1.Equals(b2));
Assert.IsFalse(b1.Equals(b3));
Assert.IsFalse(b2.Equals(b3));
}


[Test]
public void BoardCardsTest_TurnEqualityTest_WithDefaultComparision_SameCardsWithDifferentOrder_ReturnsTrue()
{
BoardCards b1 = BoardCards.ForTurn(C1, C2, C3, C4);
BoardCards b2 = BoardCards.ForTurn(C4, C2, C3, C1);

Assert.IsTrue(b1.Equals(b2));
}

[Test]
public void BoardCardsTest_RiverEqualityTest_WithDefaultComparision_DifferentCards_ReturnsFalse()
{
BoardCards b1 = BoardCards.ForRiver(C1, C2, C3, C4, C5);
BoardCards b2 = BoardCards.ForRiver(C1, C2, C3, C4, C6);
BoardCards b3 = BoardCards.ForRiver(C1, C2, C3, C6, C5);

Assert.IsFalse(b1.Equals(b2));
Assert.IsFalse(b1.Equals(b3));
Assert.IsFalse(b2.Equals(b3));
}

[Test]
public void BoardCardsTest_RiverEqualityTestWith_SameCardsWithDifferentOrder_ReturnsTrue()
{
BoardCards b1 = BoardCards.ForRiver(C1, C2, C3, C4, C5);
BoardCards b2 = BoardCards.ForRiver(C4, C2, C3, C1, C5);
BoardCards b3 = BoardCards.ForRiver(C1, C2, C3, C5, C4);
BoardCards b4 = BoardCards.ForRiver(C1, C2, C5, C3, C4);

Assert.IsTrue(b1.Equals(b2));
Assert.IsTrue(b1.Equals(b3));
Assert.IsTrue(b1.Equals(b4));
Assert.IsFalse(b2.EqualsViaHoldemOmahaRule(b3));
Assert.IsFalse(b2.EqualsViaHoldemOmahaRule(b4));
Assert.IsFalse(b3.EqualsViaHoldemOmahaRule(b4));
}


[Test]
public void BoardCardsTest_EqualityTestWithHoldemOmahaRule_CompareWithSelf_ReturnTrue()
{
Expand Down
13 changes: 6 additions & 7 deletions HandHistories.Objects/Cards/CardGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,10 @@ public override string ToString()

public override bool Equals(object obj)
{
bool stringEquality = obj.ToString().Equals(ToString());
if (stringEquality) return true;

CardGroup cardGroup = obj as CardGroup;

if (cardGroup == null) return false;

if (cardGroup.Cards.Count != Cards.Count) return false;

return (cardGroup.Cards.All(c => Cards.Contains(c)));
return Cards.Count == cardGroup.Cards.Count && GetBitMask() == cardGroup.GetBitMask();
}


Expand Down Expand Up @@ -135,5 +129,10 @@ IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

private ulong GetBitMask()
{
return Cards.Aggregate(0ul, (mask, card) => mask | 1ul << card.CardIntValue);
}
}
}

0 comments on commit ce6e9d0

Please sign in to comment.