From b4c7ba5f955f1f3d406a9ca74356151ea8ed4d58 Mon Sep 17 00:00:00 2001 From: Geoffrey Allott Date: Mon, 1 Mar 2021 21:52:47 +0000 Subject: [PATCH] add another holdem test --- src/game/poker/holdem.rs | 90 +++++++++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 25 deletions(-) diff --git a/src/game/poker/holdem.rs b/src/game/poker/holdem.rs index 979774e..b252c66 100644 --- a/src/game/poker/holdem.rs +++ b/src/game/poker/holdem.rs @@ -472,9 +472,67 @@ impl Game for TexasHoldEm { mod tests { use super::*; + fn test_game(actions: Vec, 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"}}, @@ -507,32 +565,14 @@ mod tests { {"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 = 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); } } -- 2.34.1