diff --git a/HandHistories.Objects.UnitTests/Cards/BoardCardsTests.cs b/HandHistories.Objects.UnitTests/Cards/BoardCardsTests.cs index d99cc85..e9e5659 100644 --- a/HandHistories.Objects.UnitTests/Cards/BoardCardsTests.cs +++ b/HandHistories.Objects.UnitTests/Cards/BoardCardsTests.cs @@ -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() { diff --git a/HandHistories.Objects/Cards/CardGroup.cs b/HandHistories.Objects/Cards/CardGroup.cs index df8c93c..fa19a00 100644 --- a/HandHistories.Objects/Cards/CardGroup.cs +++ b/HandHistories.Objects/Cards/CardGroup.cs @@ -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(); } @@ -135,5 +129,10 @@ IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + + private ulong GetBitMask() + { + return Cards.Aggregate(0ul, (mask, card) => mask | 1ul << card.CardIntValue); + } } } \ No newline at end of file