add another holdem test
authorGeoffrey Allott <geoffrey@allott.email>
Mon, 1 Mar 2021 21:52:47 +0000 (21:52 +0000)
committerGeoffrey Allott <geoffrey@allott.email>
Mon, 1 Mar 2021 21:52:47 +0000 (21:52 +0000)
src/game/poker/holdem.rs

index 979774e073e7eff29a1c5a5ae261c0a2c1369789..b252c66d86bd06bda08da2a15d55aab0e697b8d1 100644 (file)
@@ -472,9 +472,67 @@ impl Game for TexasHoldEm {
 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"}},
@@ -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<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);
     }
 }