diff --git a/src/hand.rs b/src/hand.rs index cfdc931..4c58f63 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -47,7 +47,7 @@ impl fmt::Display for PokerHand { impl PartialOrd for PokerHand { fn partial_cmp(&self, other: &Self) -> Option { - if self.hand_type() > other.hand_type() { + if self.hand_type() != other.hand_type() { return self.hand_type().partial_cmp(&other.hand_type()); } let selfmap = self.hash_map(); @@ -580,4 +580,167 @@ mod tests { let hand = PokerHand::new(pair); assert_eq!(hand.hand_type(), HandType::StraightFlush); } + + #[test] + fn comp_test1() { + // Hand 1 + let card1 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Jack, + }; + let card2 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Jack, + }; + let card3 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Nine, + }; + let card4 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Ace, + }; + let card5 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Eight, + }; + + // Hand 2 + let card6 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Queen, + }; + let card7 = PlayingCard { + suit: CardSuit::Clubs, + value: CardValue::Ten, + }; + let card8 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Queen, + }; + let card9 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Two, + }; + let card10 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Eight, + }; + + let cardset1 = vec![card1, card2, card3, card4, card5]; + let cardset2 = vec![card6, card7, card8, card9, card10]; + let flush = PokerHand::new(cardset1); + let onepair = PokerHand::new(cardset2); + assert!(flush > onepair); + } + + #[test] + fn straight_flush_ord_test() { + // Hand 1 + let card1 = PlayingCard { + suit: CardSuit::Clubs, + value: CardValue::Jack, + }; + let card2 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Ten, + }; + let card3 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Nine, + }; + let card4 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Eight, + }; + let card5 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Seven, + }; + + // Hand 2 + let card6 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Queen, + }; + let card7 = PlayingCard { + suit: CardSuit::Clubs, + value: CardValue::Jack, + }; + let card8 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Ten, + }; + let card9 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Nine, + }; + let card10 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Eight, + }; + + let cardset1 = vec![card1, card2, card3, card4, card5]; + let cardset2 = vec![card6, card7, card8, card9, card10]; + let hand1 = PokerHand::new(cardset1); + let hand2 = PokerHand::new(cardset2); + assert!(hand1 < hand2); + assert!(hand1 >= hand1); + assert!(hand2 <= hand2); + } + + #[test] + fn four_kind_ord_test() { + // Hand 1 + let card1 = PlayingCard { + suit: CardSuit::Clubs, + value: CardValue::Jack, + }; + let card2 = PlayingCard { + suit: CardSuit::Hearts, + value: CardValue::Jack, + }; + let card3 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Jack, + }; + let card4 = PlayingCard { + suit: CardSuit::Spades, + value: CardValue::Jack, + }; + let card5 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Seven, + }; + + // Hand 2 + let card6 = PlayingCard { + suit: CardSuit::Spades, + value: CardValue::Queen, + }; + let card7 = PlayingCard { + suit: CardSuit::Hearts, + value: CardValue::Queen, + }; + let card8 = PlayingCard { + suit: CardSuit::Clubs, + value: CardValue::Queen, + }; + let card9 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Queen, + }; + let card10 = PlayingCard { + suit: CardSuit::Diamonds, + value: CardValue::Eight, + }; + + let cardset1 = vec![card1, card2, card3, card4, card5]; + let cardset2 = vec![card6, card7, card8, card9, card10]; + let hand1 = PokerHand::new(cardset1); + let hand2 = PokerHand::new(cardset2); + assert!(hand1 < hand2); + assert!(hand1 >= hand1); + assert!(hand2 <= hand2); + } }