1use dice_parser::DiceExpr;
4use rand::{rngs::StdRng, SeedableRng};
5
6fn main() {
7 println!("=== Deterministic Rolling with Custom RNG ===\n");
8
9 let expr = DiceExpr::parse("2d6+3").unwrap();
10
11 println!("Rolling the same expression with the same seed produces identical results:\n");
12
13 let rng1 = StdRng::seed_from_u64(42);
15 let result1 = expr.roll_with_rng(rng1).unwrap();
16 println!("First roll (seed 42):");
17 println!(" Total: {}", result1.total);
18 println!(" Rolls: {:?}", result1.rolls);
19
20 let rng2 = StdRng::seed_from_u64(42);
22 let result2 = expr.roll_with_rng(rng2).unwrap();
23 println!("\nSecond roll (seed 42):");
24 println!(" Total: {}", result2.total);
25 println!(" Rolls: {:?}", result2.rolls);
26
27 assert_eq!(result1.total, result2.total);
28 assert_eq!(result1.rolls, result2.rolls);
29 println!("\n✓ Results match as expected!");
30
31 let rng3 = StdRng::seed_from_u64(123);
33 let result3 = expr.roll_with_rng(rng3).unwrap();
34 println!("\nThird roll (seed 123):");
35 println!(" Total: {}", result3.total);
36 println!(" Rolls: {:?}", result3.rolls);
37 println!("\n✓ Different seed produces different results (usually)");
38}