summaryrefslogtreecommitdiffstats
path: root/tests/client_core.rs
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-11-08 03:36:26 +0100
committersalmonik <salmonik@tuta.io>2026-11-08 03:36:26 +0100
commitc6c8ddb7e4117628549afdb382b0d46f830f242d (patch)
treecd59ac8bf690c942bce3b226f5777d01fde4896b /tests/client_core.rs
parentweb: restore the balance on a refresh into history (diff)
downloadzagan-bet-c6c8ddb7e4117628549afdb382b0d46f830f242d.tar.gz
zagan-bet-c6c8ddb7e4117628549afdb382b0d46f830f242d.zip
crash: show and verify the revealed seed in the TUI and GUI
The crash board gained a fairness line: the short commit while the round runs, then the short seed marked verified when sha256(seed) and the recomputed crash point both match. The terminal board grew from six to seven lines and the GUI sidebar shows the same values.
Diffstat (limited to 'tests/client_core.rs')
-rw-r--r--tests/client_core.rs33
1 files changed, 31 insertions, 2 deletions
diff --git a/tests/client_core.rs b/tests/client_core.rs
index 3a2fb27..65fd1e6 100644
--- a/tests/client_core.rs
+++ b/tests/client_core.rs
@@ -987,9 +987,10 @@ fn crash_starts_a_round_and_draws_the_multiplier_locally() {
987 let mut h = Harness::new(); 987 let mut h = Harness::new();
988 h.enter_crash(); 988 h.enter_crash();
989 989
990 assert_eq!(h.board().len(), 6); 990 assert_eq!(h.board().len(), 7);
991 assert!(h.board()[4].contains("Press [SPACE] to start.")); 991 assert!(h.board()[4].contains("Press [SPACE] to start."));
992 assert!(h.board()[5].contains("[SPACE] Play")); 992 assert!(h.board()[5].contains("[SPACE] Play"));
993 assert!(h.board()[6].contains("Commit: —"));
993 994
994 h.key(Key::Char(' ')); 995 h.key(Key::Char(' '));
995 assert!(h.sent.iter().any(|line| line == "PLAY_START crash 10")); 996 assert!(h.sent.iter().any(|line| line == "PLAY_START crash 10"));
@@ -997,7 +998,7 @@ fn crash_starts_a_round_and_draws_the_multiplier_locally() {
997 let running = crash_state("running", 1.0, None, 0, 990); 998 let running = crash_state("running", 1.0, None, 0, 990);
998 h.reply(&crash_line("CRASH_START", &running)); 999 h.reply(&crash_line("CRASH_START", &running));
999 1000
1000 assert_eq!(h.board().len(), 6); 1001 assert_eq!(h.board().len(), 7);
1001 assert!(h.board()[2].contains("Multiplier: 1.00x")); 1002 assert!(h.board()[2].contains("Multiplier: 1.00x"));
1002 assert!(h.board()[3].contains("Potential: 10 Kr")); 1003 assert!(h.board()[3].contains("Potential: 10 Kr"));
1003 assert!(h.board()[4].contains("Rising")); 1004 assert!(h.board()[4].contains("Rising"));
@@ -1709,3 +1710,31 @@ fn a_crash_tick_updates_the_board_for_its_own_session() {
1709 h.push("crash.tick session=other t=1700000000200 m=9.0"); 1710 h.push("crash.tick session=other t=1700000000200 m=9.0");
1710 assert!(h.board()[2].contains("Multiplier: 1.50x")); 1711 assert!(h.board()[2].contains("Multiplier: 1.50x"));
1711} 1712}
1713
1714#[test]
1715fn the_crash_board_verifies_the_revealed_seed() {
1716 use zagan_bet::crash::{commit_seed, crash_point_from_seed};
1717
1718 let mut h = Harness::new();
1719 h.enter_crash();
1720 h.key(Key::Char(' '));
1721 let mut seed = [0u8; 32];
1722 seed[..8].copy_from_slice(&(0.67_f64 * 18_446_744_073_709_551_616.0).to_be_bytes());
1723 let commit = commit_seed(&seed);
1724 let point = crash_point_from_seed(&seed);
1725 let hex = seed
1726 .iter()
1727 .map(|byte| format!("{byte:02x}"))
1728 .collect::<String>();
1729
1730 let mut cashed = crash_state("cashed", 2.0, Some(point), 20, 1010);
1731 cashed.commit = Some(commit);
1732 cashed.seed = Some(hex);
1733 h.reply(&crash_line("CRASH_STATE", &cashed));
1734
1735 assert!(
1736 h.board()[6].contains("verified"),
1737 "fairness line: {}",
1738 h.board()[6]
1739 );
1740}