mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 15:16:33 -08:00
Refactor scoreHand and compareHands into ScoringUtils
This commit is contained in:
@@ -154,207 +154,6 @@ public class GameTest {
|
||||
assertTrue(out.toString().contains("TYPE H, OR S, PLEASE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("scoreHand should sum non-ace values normally")
|
||||
public void scoreHandNormally() {
|
||||
// Given
|
||||
LinkedList<Card> hand = new LinkedList<>();
|
||||
hand.add(new Card(4, Card.Suit.SPADES));
|
||||
hand.add(new Card(6, Card.Suit.SPADES));
|
||||
hand.add(new Card(10, Card.Suit.SPADES));
|
||||
|
||||
initGame();
|
||||
|
||||
// When
|
||||
int result = game.scoreHand(hand);
|
||||
|
||||
// Then
|
||||
assertEquals(20, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("scoreHand should treat face cards as 10")
|
||||
public void scoreHandFaceCards() {
|
||||
// Given
|
||||
LinkedList<Card> hand = new LinkedList<>();
|
||||
hand.add(new Card(11, Card.Suit.SPADES));
|
||||
hand.add(new Card(12, Card.Suit.SPADES));
|
||||
hand.add(new Card(13, Card.Suit.SPADES));
|
||||
|
||||
initGame();
|
||||
|
||||
// When
|
||||
int result = game.scoreHand(hand);
|
||||
|
||||
// Then
|
||||
assertEquals(30, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("scoreHand should score aces as 11 when possible")
|
||||
public void scoreHandSoftAce() {
|
||||
// Given
|
||||
LinkedList<Card> hand = new LinkedList<>();
|
||||
hand.add(new Card(10, Card.Suit.SPADES));
|
||||
hand.add(new Card(1, Card.Suit.SPADES));
|
||||
|
||||
initGame();
|
||||
|
||||
// When
|
||||
int result = game.scoreHand(hand);
|
||||
|
||||
// Then
|
||||
assertEquals(21, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("scoreHand should score aces as 1 when using 11 would bust")
|
||||
public void scoreHandHardAce() {
|
||||
// Given
|
||||
LinkedList<Card> hand = new LinkedList<>();
|
||||
hand.add(new Card(10, Card.Suit.SPADES));
|
||||
hand.add(new Card(9, Card.Suit.SPADES));
|
||||
hand.add(new Card(1, Card.Suit.SPADES));
|
||||
|
||||
initGame();
|
||||
|
||||
// When
|
||||
int result = game.scoreHand(hand);
|
||||
|
||||
// Then
|
||||
assertEquals(20, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("scoreHand should score 3 aces as 13")
|
||||
public void scoreHandMultipleAces() {
|
||||
// Given
|
||||
LinkedList<Card> hand = new LinkedList<>();
|
||||
hand.add(new Card(1, Card.Suit.SPADES));
|
||||
hand.add(new Card(1, Card.Suit.CLUBS));
|
||||
hand.add(new Card(1, Card.Suit.HEARTS));
|
||||
|
||||
initGame();
|
||||
|
||||
// When
|
||||
int result = game.scoreHand(hand);
|
||||
|
||||
// Then
|
||||
assertEquals(13, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return 1 meaning A beat B, 20 to 12")
|
||||
public void compareHandsAWins() {
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(10, Card.Suit.SPADES));
|
||||
handA.add(new Card(10, Card.Suit.CLUBS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(1, Card.Suit.SPADES));
|
||||
handB.add(new Card(1, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(1, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return -1 meaning B beat A, 18 to 4")
|
||||
public void compareHandsBwins() {
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(2, Card.Suit.SPADES));
|
||||
handA.add(new Card(2, Card.Suit.CLUBS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(5, Card.Suit.SPADES));
|
||||
handB.add(new Card(6, Card.Suit.HEARTS));
|
||||
handB.add(new Card(7, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(-1, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return 1 meaning A beat B, natural Blackjack to Blackjack")
|
||||
public void compareHandsAWinsWithNaturalBlackJack() {
|
||||
//Hand A wins with natural BlackJack, B with Blackjack
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(10, Card.Suit.SPADES));
|
||||
handA.add(new Card(1, Card.Suit.CLUBS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(6, Card.Suit.SPADES));
|
||||
handB.add(new Card(7, Card.Suit.HEARTS));
|
||||
handB.add(new Card(8, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(1, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return -1 meaning B beat A, natural Blackjack to Blackjack")
|
||||
public void compareHandsBWinsWithNaturalBlackJack() {
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(6, Card.Suit.SPADES));
|
||||
handA.add(new Card(7, Card.Suit.HEARTS));
|
||||
handA.add(new Card(8, Card.Suit.CLUBS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(10, Card.Suit.SPADES));
|
||||
handB.add(new Card(1, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(-1, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return 0, hand A and B tied with a Blackjack")
|
||||
public void compareHandsTieBothBlackJack() {
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(11, Card.Suit.SPADES));
|
||||
handA.add(new Card(10, Card.Suit.CLUBS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(10, Card.Suit.SPADES));
|
||||
handB.add(new Card(11, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("compareHands should return 0, hand A and B tie without a Blackjack")
|
||||
public void compareHandsTieNoBlackJack() {
|
||||
LinkedList<Card> handA = new LinkedList<>();
|
||||
handA.add(new Card(10, Card.Suit.DIAMONDS));
|
||||
handA.add(new Card(10, Card.Suit.HEARTS));
|
||||
|
||||
LinkedList<Card> handB = new LinkedList<>();
|
||||
handB.add(new Card(10, Card.Suit.SPADES));
|
||||
handB.add(new Card(10, Card.Suit.CLUBS));
|
||||
|
||||
initGame();
|
||||
|
||||
int result = game.compareHands(handA,handB);
|
||||
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("play() should end on STAY after split")
|
||||
public void playSplitEndOnStay(){
|
||||
|
||||
Reference in New Issue
Block a user