/**
  * @dataProvider hands
  *
  * @param HandInterface $hand
  * @param $searchedHand
  * @param $expectedHand
  */
 public function test_it_will_return_an_hand_that_matches_the_search_null_otherwise(HandInterface $hand, $howManyCards, $searchedHand, $expectedHand)
 {
     $handSearch = $this->prophesize(HandSearch::class);
     $handSearch->search(Argument::cetera())->willReturn(new Hand(...[]));
     $handSearch->search(new Card(2, Suit::spades()), Argument::cetera())->willReturn($searchedHand);
     $twoOfAKindFinder = new EqualityFinder($handSearch->reveal(), $howManyCards);
     $actualHand = $twoOfAKindFinder->find($hand);
     $this->assertEquals($expectedHand, $actualHand);
 }
 public function test_it_will_return_an_hand_that_matches_the_search_null_otherwise()
 {
     $handSearch = $this->prophesize(HandSearch::class);
     $handSearch->search(Argument::cetera())->willReturn(new Hand(...[]));
     $hand = new Hand(...StaticFixtures::straight());
     $handSearch->search(Argument::which('getFaceValue', 3), Argument::cetera())->willReturn(new Hand(new Card(3, Suit::spades())))->shouldBeCalled();
     $handSearch->search(Argument::which('getFaceValue', 4), Argument::cetera())->willReturn(new Hand(new Card(4, Suit::flowers())))->shouldBeCalled();
     $handSearch->search(Argument::which('getFaceValue', 5), Argument::cetera())->willReturn(new Hand(new Card(5, Suit::spades())))->shouldBeCalled();
     $handSearch->search(Argument::which('getFaceValue', 6), Argument::cetera())->willReturn(new Hand(new Card(6, Suit::spades())))->shouldBeCalled();
     $handSearch->search(Argument::which('getFaceValue', 7), Argument::cetera())->willReturn(new Hand(new Card(7, Suit::spades())))->shouldBeCalled();
     $handSearch->search(Argument::any(), Argument::cetera())->willReturn(null);
     $finder = new StraightFinder($handSearch->reveal());
     $this->assertEquals($hand, $finder->find($hand));
 }
Exemple #3
0
 /**
  * @param HandInterface $hand
  *
  * @return HandInterface
  */
 public function find(HandInterface $hand)
 {
     if (count($hand->getCards()) < 5) {
         return null;
     }
     $cards = $hand->getCards();
     foreach ($cards as $card) {
         $start = max($card->getFaceValue() - 4, 1);
         $end = min($card->getFaceValue() + 4, 14);
         $flushCards = [];
         for ($faceValueCounter = $start; $faceValueCounter <= $end; ++$faceValueCounter) {
             $matchingHand = $this->handSearch->search(new Card($faceValueCounter == 1 ? 14 : $faceValueCounter, Suit::diamonds()), $hand);
             if ($matchingHand && count($matchingHand->getCards())) {
                 $flushCards[] = $matchingHand->getCards()[0];
             }
             if (count($flushCards) == 5) {
                 return new Hand(...$flushCards);
             }
         }
     }
     return null;
 }
Exemple #4
0
 public function test_should_have_a_valid_suit()
 {
     $card = new Card(2, Suit::spades());
     $this->assertInstanceOf(Suit::class, $card->getSuit());
 }
Exemple #5
0
 /**
  * @return array
  */
 public function hands()
 {
     return [[new Card(2, Suit::spades()), new Hand(...StaticFixtures::one_pair()), new Hand(...StaticFixtures::two_pairs_first_pair())], [new Card(2, Suit::spades()), new Hand(...StaticFixtures::three_of_a_kind()), new Hand(...StaticFixtures::three_of_a_kind_actual_three())], [new Card(9, Suit::spades()), new Hand(...StaticFixtures::three_of_a_kind()), null]];
 }
Exemple #6
0
 /**
  * @return array
  */
 public static function getFlush()
 {
     return [new Card(2, Suit::spades()), new Card(3, Suit::spades()), new Card(4, Suit::spades()), new Card(5, Suit::spades()), new Card(6, Suit::spades())];
 }
 public static function three_of_a_kind_matching_pair()
 {
     return [new Card(2, Suit::spades()), new Card(2, Suit::flowers())];
 }
Exemple #8
0
 public static function straight_actual_straight()
 {
     return [new Card(3, Suit::spades()), new Card(4, Suit::flowers()), new Card(5, Suit::spades()), new Card(6, Suit::spades()), new Card(7, Suit::spades())];
 }
Exemple #9
0
 public static function two_pairs_second_pair()
 {
     return [new Card(4, Suit::spades()), new Card(4, Suit::flowers())];
 }