292 lines
11 KiB
C
292 lines
11 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "dealer.h"
|
|
|
|
void test_pokerDealerSet_should_SetANewSetOfPlayers(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
|
|
pokerDealerSet(&poker, 0x00);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x01);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x02);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x03);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x04);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x00);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerBigBlind);
|
|
}
|
|
|
|
void test_pokerDealerSet_should_SkipOutPlayers(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerAdd(&poker);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerAdd(&poker);
|
|
|
|
pokerDealerSet(&poker, 0x00);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x01);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x02);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x03);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind);
|
|
|
|
pokerDealerSet(&poker, 0x04);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind);
|
|
}
|
|
|
|
void test_pokerDealerNew_should_FindANewDealer(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 1000);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind);
|
|
|
|
pokerDealerNew(&poker);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerBigBlind);
|
|
|
|
pokerDealerNew(&poker);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerBigBlind);
|
|
|
|
pokerDealerNew(&poker);
|
|
TEST_ASSERT_EQUAL_UINT8(3, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerBigBlind);
|
|
|
|
pokerDealerNew(&poker);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.playerDealer);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.playerSmallBlind);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.playerBigBlind);
|
|
}
|
|
|
|
void test_pokerDealerTurn_should_TurnCardsFromTheDeck(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.communitySize);
|
|
|
|
pokerDealerTurn(&poker, 1);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 1, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.communitySize);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.community[0]);
|
|
|
|
pokerDealerTurn(&poker, 3);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 4, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.communitySize);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.community[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.community[2]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_JACK, poker.community[3]);
|
|
}
|
|
|
|
void test_pokerDealerBurn_should_SendCardsToTheGrave(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.graveSize);
|
|
|
|
pokerDealerBurn(&poker, 1);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 1, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.graveSize);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.grave[0]);
|
|
|
|
pokerDealerBurn(&poker, 3);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 4, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(4, poker.graveSize);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.grave[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.grave[2]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_JACK, poker.grave[3]);
|
|
|
|
}
|
|
|
|
void test_pokerDeal_should_DealCardsToThePlayer(void) {
|
|
poker_t poker;
|
|
uint8_t playerIndex;
|
|
pokerplayer_t *player;
|
|
|
|
pokerInit(&poker);
|
|
|
|
playerIndex = pokerPlayerAdd(&poker);
|
|
player = poker.players + playerIndex;
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, player->cardCount);
|
|
|
|
pokerDeal(&poker, player, 0x01);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 1, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(1, player->cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, player->cards[0]);
|
|
|
|
pokerDeal(&poker, player, 0x01);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 2, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(2, player->cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, player->cards[1]);
|
|
}
|
|
|
|
void test_pokerDealAllPlayers_should_DealCardsToEveryone(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[0].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[1].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[2].cardCount);
|
|
|
|
pokerDealAllPlayers(&poker, 1);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE - 3, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.players[0].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.players[1].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(1, poker.players[2].cardCount);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.players[0].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.players[1].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.players[2].cards[0]);
|
|
}
|
|
|
|
void test_pokerDealAllPlayers_should_DealMultipleCardsToEveryone(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[0].cardCount);
|
|
|
|
pokerDealAllPlayers(&poker, 0x02);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[0].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[1].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[2].cardCount);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.players[0].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.players[1].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.players[2].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_JACK, poker.players[0].cards[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_TEN, poker.players[1].cards[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_NINE, poker.players[2].cards[1]);
|
|
}
|
|
|
|
void test_pokerDealAllPlayers_should_NotDealToOutPlayers(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerAdd(&poker);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_DECK_SIZE, poker.deckSize);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[0].cardCount);
|
|
|
|
pokerDealAllPlayers(&poker, 0x02);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[0].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[1].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[2].cardCount);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.players[0].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.players[2].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.players[0].cards[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_JACK, poker.players[2].cards[1]);
|
|
}
|
|
|
|
void test_pokerDealAllPlayers_should_NotDealToFoldedPlayers(void) {
|
|
poker_t poker;
|
|
pokerInit(&poker);
|
|
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
pokerPlayerChipsAdd(poker.players + pokerPlayerAdd(&poker), 100);
|
|
poker.players[0].state |= POKER_PLAYER_STATE_FOLDED;
|
|
|
|
pokerDealAllPlayers(&poker, 2);
|
|
TEST_ASSERT_EQUAL_UINT8(0, poker.players[0].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[1].cardCount);
|
|
TEST_ASSERT_EQUAL_UINT8(2, poker.players[2].cardCount);
|
|
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_ACE, poker.players[1].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_KING, poker.players[2].cards[0]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_QUEEN, poker.players[1].cards[1]);
|
|
TEST_ASSERT_EQUAL_UINT8(CARD_SPADES_JACK, poker.players[2].cards[1]);
|
|
}
|
|
|
|
int test_dealer_h() {
|
|
UNITY_BEGIN();
|
|
|
|
RUN_TEST(test_pokerDealerSet_should_SetANewSetOfPlayers);
|
|
RUN_TEST(test_pokerDealerSet_should_SkipOutPlayers);
|
|
RUN_TEST(test_pokerDealerNew_should_FindANewDealer);
|
|
RUN_TEST(test_pokerDealerTurn_should_TurnCardsFromTheDeck);
|
|
RUN_TEST(test_pokerDealerBurn_should_SendCardsToTheGrave);
|
|
RUN_TEST(test_pokerDeal_should_DealCardsToThePlayer);
|
|
RUN_TEST(test_pokerDealAllPlayers_should_DealCardsToEveryone);
|
|
RUN_TEST(test_pokerDealAllPlayers_should_DealMultipleCardsToEveryone);
|
|
RUN_TEST(test_pokerDealAllPlayers_should_NotDealToOutPlayers);
|
|
RUN_TEST(test_pokerDealAllPlayers_should_NotDealToFoldedPlayers);
|
|
|
|
return UNITY_END();
|
|
} |