1#![forbid(unsafe_code)]
2pub use use_event_simulation;
29pub use use_event_simulation::*;
30pub use use_monte_carlo;
31pub use use_monte_carlo::*;
32pub use use_random_walk;
33pub use use_random_walk::*;
34pub use use_seed;
35pub use use_seed::*;
36pub use use_simulation_clock;
37pub use use_simulation_clock::*;
38pub use use_simulation_result;
39pub use use_simulation_result::*;
40pub use use_state_step;
41pub use use_state_step::*;
42
43#[cfg(test)]
44mod tests {
45 use super::{
46 RandomWalkConfig, SimulationClock, SimulationEvent, SimulationSeed, monte_carlo_mean,
47 random_walk, run_event_simulation, step_state, summarize,
48 };
49
50 #[test]
51 fn facade_reexports_workspace_apis() {
52 let seed = SimulationSeed::new(3);
53 let branches = seed.split(2).unwrap();
54 assert_eq!(branches.len(), 2);
55
56 let path = random_walk(RandomWalkConfig {
57 start: 0.0,
58 step_size: 1.0,
59 steps: 4,
60 seed,
61 })
62 .unwrap();
63 let result = summarize(&path).unwrap();
64 assert_eq!(result.steps, 4);
65
66 let estimate = monte_carlo_mean(seed, 4, |sample| sample).unwrap();
67 assert_eq!(estimate.samples, 4);
68
69 let states = run_event_simulation(
70 0.0,
71 &[
72 SimulationEvent::new(1.0, 2.0).unwrap(),
73 SimulationEvent::new(2.0, -1.0).unwrap(),
74 ],
75 )
76 .unwrap();
77 assert_eq!(states.len(), 3);
78
79 let mut clock = SimulationClock::new(1.0).unwrap();
80 assert_eq!(clock.advance().unwrap(), 1.0);
81 assert_eq!(step_state(1.0, 2.0, 0).unwrap().next_state, 3.0);
82 }
83}