mod tests {
use super::*;
+ fn test_game(actions: Vec<UserAction>, settings: TexasHoldEmSettings, seed: Seed) {
+ let mut game = TexasHoldEm::new(0, settings, seed);
+ for action in actions {
+ match action.action {
+ Action::Join{..} | Action::Bet{..} | Action::Fold => {
+ let validated = game.validate_action(action.clone()).unwrap();
+ assert_eq!(ValidatedUserAction(action), validated);
+ game.take_action(validated).unwrap();
+ }
+ _ => {
+ let dealer_action = game.next_dealer_action().unwrap();
+ assert_eq!(ValidatedUserAction(action), dealer_action);
+ game.take_action(dealer_action).unwrap();
+ }
+ }
+ }
+ }
+
+ #[test]
+ fn simple_heads_up_with_1_hand() {
+ let actions = r#"[
+ {"username":"kat","action":{"action":"Join","seat":0,"chips":1000}},
+ {"username":"geoff","action":{"action":"Join","seat":1,"chips":1000}},
+ {"username":"geoff","action":{"action":"NextToDeal"}},
+ {"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Diamonds"}}},
+ {"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Hearts"}}},
+ {"username":"kat","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+ {"username":"geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Clubs"}}},
+ {"username":"geoff","action":{"action":"EndDeal"}},
+ {"username":"geoff","action":{"action":"PostBlind","chips":100}},
+ {"username":"kat","action":{"action":"PostBlind","chips":200}},
+ {"username":"geoff","action":{"action":"Bet","chips":300}},
+ {"username":"kat","action":{"action":"Bet","chips":200}},
+ {"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Three","suit":"Hearts"}}},
+ {"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Two","suit":"Diamonds"}}},
+ {"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Two","suit":"Hearts"}}},
+ {"username":"kat","action":{"action":"Bet","chips":0}},
+ {"username":"geoff","action":{"action":"Bet","chips":200}},
+ {"username":"kat","action":{"action":"Bet","chips":200}},
+ {"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Nine","suit":"Spades"}}},
+ {"username":"kat","action":{"action":"Bet","chips":400}},
+ {"username":"geoff","action":{"action":"Bet","chips":400}},
+ {"username":"geoff","action":{"action":"CommunityCard","card":{"rank":"Jack","suit":"Spades"}}},
+ {"username":"kat","action":{"action":"WinHand","chips":2000,"hand":"Two Pair, 9s & 2s, J Kicker"}},
+ {"username":"geoff","action":{"action":"KnockedOut"}},
+ {"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}"#;
+ let settings = serde_json::from_str(settings).unwrap();
+
+ let seed = r#"{"rng":"ChaCha20","seed":"e0355d5c6c63ef757d1b874b0392a3deec73cadfb0a2aa7947a04db651bf9269"}"#;
+ let seed = serde_json::from_str(seed).unwrap();
+
+ test_game(actions, settings, seed);
+ }
+
#[test]
fn simple_heads_up_with_2_hands() {
- let json = r#"[
+ let actions = r#"[
{"username":"p1","action":{"action":"Join","seat":0,"chips":1000}},
{"username":"p2","action":{"action":"Join","seat":1,"chips":1000}},
{"username":"p1","action":{"action":"NextToDeal"}},
{"username":"p1","action":{"action":"KnockedOut"}},
{"username":"p2","action":{"action":"WinGame"}}
]"#;
+ let actions = serde_json::from_str(actions).unwrap();
- let settings = TexasHoldEmSettings {
- title: "2-Player TexasHoldEm Test".to_string(),
- max_players: 2,
- small_blind: 25,
- starting_stack: 1000,
- };
+ let settings = r#"{"title":"2-Player TexasHoldEm Test","max_players":2,"small_blind":25,"starting_stack":1000}"#;
+ let settings = serde_json::from_str(settings).unwrap();
- let seed_json = r#"{"rng":"ChaCha20","seed":"f05dc83bdce966e72a3a81b19ccded2e70387eb68deacf60ed8de1ee78b9ff0e"}"#;
- let seed = serde_json::from_str(seed_json).unwrap();
+ let seed = r#"{"rng":"ChaCha20","seed":"f05dc83bdce966e72a3a81b19ccded2e70387eb68deacf60ed8de1ee78b9ff0e"}"#;
+ let seed = serde_json::from_str(seed).unwrap();
- let mut game = TexasHoldEm::new(0, settings, seed);
- let actions: Vec<UserAction> = serde_json::from_str(json).unwrap();
- for action in actions {
- match action.action {
- Action::Join{..} | Action::Bet{..} | Action::Fold => {
- let validated = game.validate_action(action.clone()).unwrap();
- assert_eq!(ValidatedUserAction(action), validated);
- game.take_action(validated).unwrap();
- }
- _ => {
- let dealer_action = game.next_dealer_action().unwrap();
- assert_eq!(ValidatedUserAction(action), dealer_action);
- game.take_action(dealer_action).unwrap();
- }
- }
- }
+ test_game(actions, settings, seed);
}
}