diff --git a/src/Domain/HiLoCounter.php b/src/Domain/HiLoCounter.php new file mode 100644 index 0000000..65965e9 --- /dev/null +++ b/src/Domain/HiLoCounter.php @@ -0,0 +1,29 @@ +numericValue(); + + if ($value >= 2 && $value <= 6) { + $this->count++; + } elseif ($value >= 10) { + $this->count--; + } + } + + public function runningCount(): int + { + return $this->count; + } + + public function reset(): void + { + $this->count = 0; + } +} \ No newline at end of file diff --git a/tests/Domain/BasicStrategyTest.php b/tests/Domain/BasicStrategyTest.php index c2802da..18543c0 100644 --- a/tests/Domain/BasicStrategyTest.php +++ b/tests/Domain/BasicStrategyTest.php @@ -516,4 +516,17 @@ public function testPairOf10sShouldNotSplit(): void $this->assertSame(Decision::Stand, $strategy->decide($hand, $dealerCard)); } + + public function testPairOf9sAgainstDealerTenShouldStand(): void + { + $strategy = new BasicStrategy(); + + $hand = new Hand(); + $hand->addCard(new Card('9', 'Hearts')); + $hand->addCard(new Card('9', 'Spades')); + + $dealerCard = new Card('10', 'Diamonds'); + + $this->assertSame(Decision::Stand, $strategy->decide($hand, $dealerCard)); + } } \ No newline at end of file diff --git a/tests/Domain/HiLoCounterTest.php b/tests/Domain/HiLoCounterTest.php new file mode 100644 index 0000000..809f9d5 --- /dev/null +++ b/tests/Domain/HiLoCounterTest.php @@ -0,0 +1,55 @@ +count(new Card('5', 'Hearts')); + + $this->assertSame(1, $counter->runningCount()); + } + + public function testNeutralCardDoesNotChangeCount(): void + { + $counter = new HiLoCounter(); + $counter->count(new Card('7', 'Hearts')); + + $this->assertSame(0, $counter->runningCount()); + } + + public function testHighCardDecrementsCount(): void + { + $counter = new HiLoCounter(); + $counter->count(new Card('King', 'Hearts')); + + $this->assertSame(-1, $counter->runningCount()); + } + + public function testMultipleCardsAccumulateCount(): void + { + $counter = new HiLoCounter(); + $counter->count(new Card('2', 'Hearts')); + $counter->count(new Card('King', 'Spades')); + $counter->count(new Card('5', 'Diamonds')); + $counter->count(new Card('7', 'Clubs')); + + $this->assertSame(1, $counter->runningCount()); + } + + public function testResetCounterReturnsToZero(): void + { + $counter = new HiLoCounter(); + $counter->count(new Card('2', 'Hearts')); + $counter->count(new Card('3', 'Spades')); + $counter->reset(); + + $this->assertSame(0, $counter->runningCount()); + } +} \ No newline at end of file