}
}
self.all_bets_are_in() && self.all_bets_are_equal()
+ || self.players_able_to_bet() <= 1 && self.bets.len() == 0
}
}
self.community.insert(card);
self.deck.remove(&card);
if self.community.len() == 3 {
- self.active = self.seats.player_after_where(username, |username| self.is_able_to_bet(username));
+ self.active = if self.betting_round_completed() {
+ None
+ } else {
+ self.seats.player_after_where(username, |username| self.is_able_to_bet(username))
+ };
self.state = match self.active {
Some(_) => State::PostFlopBetting,
None => State::DealingTurn,
(State::DealingTurn, Action::CommunityCard{card}) => {
self.community.insert(card);
self.deck.remove(&card);
- self.active = self.seats.player_after_where(username, |username| self.is_able_to_bet(username));
+ self.active = if self.betting_round_completed() {
+ None
+ } else {
+ self.seats.player_after_where(username, |username| self.is_able_to_bet(username))
+ };
self.state = match self.active {
Some(_) => State::TurnBetting,
None => State::DealingRiver,
(State::DealingRiver, Action::CommunityCard{card}) => {
self.community.insert(card);
self.deck.remove(&card);
- self.active = self.seats.player_after_where(username, |username| self.is_able_to_bet(username));
+ self.active = if self.betting_round_completed() {
+ None
+ } else {
+ self.seats.player_after_where(username, |username| self.is_able_to_bet(username))
+ };
self.state = match self.active {
Some(_) => State::RiverBetting,
None => State::Showdown,
test_game(actions, settings, seed);
}
+
+ #[test]
+ fn deals_cards_to_completion_when_all_in() {
+ let actions = r#"[
+ {"timestamp":1614881204492,"username":"geoff","action":{"action":"Join","seat":0,"chips":1000}},
+ {"timestamp":1614881208123,"username":"kat","action":{"action":"Join","seat":1,"chips":1000}},
+ {"timestamp":1614881208131,"username":"kat","action":{"action":"NextToDeal"}},
+ {"timestamp":1614881208139,"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Diamonds"}}},
+ {"timestamp":1614881208147,"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Six","suit":"Diamonds"}}},
+ {"timestamp":1614881208163,"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+ {"timestamp":1614881208185,"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Clubs"}}},
+ {"timestamp":1614881208201,"username":"kat","action":{"action":"EndDeal"}},
+ {"timestamp":1614881208214,"username":"kat","action":{"action":"PostBlind","chips":100}},
+ {"timestamp":1614881208222,"username":"geoff","action":{"action":"PostBlind","chips":200}},
+ {"timestamp":1614881226321,"username":"kat","action":{"action":"Bet","chips":300}},
+ {"timestamp":1614881227926,"username":"geoff","action":{"action":"Fold"}},
+ {"timestamp":1614881227932,"username":"kat","action":{"action":"WinHand","chips":600,"hand":null}},
+ {"timestamp":1614881227938,"username":"geoff","action":{"action":"NextToDeal"}},
+ {"timestamp":1614881227944,"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+ {"timestamp":1614881227949,"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Clubs"}}},
+ {"timestamp":1614881227957,"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Diamonds"}}},
+ {"timestamp":1614881227969,"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+ {"timestamp":1614881227980,"username":"geoff","action":{"action":"EndDeal"}},
+ {"timestamp":1614881227991,"username":"geoff","action":{"action":"PostBlind","chips":100}},
+ {"timestamp":1614881228000,"username":"kat","action":{"action":"PostBlind","chips":200}},
+ {"timestamp":1614881234665,"username":"geoff","action":{"action":"Bet","chips":700}},
+ {"timestamp":1614881236125,"username":"kat","action":{"action":"Bet","chips":600}},
+ {"timestamp":1614881236132,"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Ace","suit":"Clubs"}}},
+ {"timestamp":1614881236136,"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Eight","suit":"Spades"}}},
+ {"timestamp":1614881236141,"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Jack","suit":"Clubs"}}},
+ {"timestamp":1614881241470,"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Seven","suit":"Clubs"}}},
+ {"timestamp":1614881244838,"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Five","suit":"Spades"}}},
+ {"timestamp":1614881247469,"username":"kat","action":{"action":"WinHand","chips":1600,"hand":"Two Pair, As & Js, 8 Kicker"}},
+ {"timestamp":1614881247477,"username":"geoff","action":{"action":"KnockedOut"}},
+ {"timestamp":1614881247480,"username":"kat","action":{"action":"WinGame"}}
+ ]"#;
+ let actions = serde_json::from_str(actions).unwrap();
+
+ let settings = r#"{"title":"2-Player TexasHoldEm Test","max_players":2,"small_blind":100,"starting_stack":1000,"action_timeout":null}"#;
+ let settings = serde_json::from_str(settings).unwrap();
+
+ let seed = r#"{"rng":"ChaCha20","seed":"8de0ac3be302e26cbc0a371044c8b349107108abb1f94a10fe84ba04a59d7f31"}"#;
+ let seed = serde_json::from_str(seed).unwrap();
+
+ test_game(actions, settings, seed);
+ }
}