1use poolsim_core::{
2 simulate,
3 types::{PoolConfig, SimulationOptions, WorkloadConfig},
4};
5
6fn build_inputs() -> (WorkloadConfig, PoolConfig, SimulationOptions) {
7 let workload = WorkloadConfig {
8 requests_per_second: 220.0,
9 latency_p50_ms: 8.0,
10 latency_p95_ms: 32.0,
11 latency_p99_ms: 85.0,
12 raw_samples_ms: None,
13 step_load_profile: None,
14 };
15 let pool = PoolConfig {
16 max_server_connections: 120,
17 connection_overhead_ms: 2.0,
18 idle_timeout_ms: None,
19 min_pool_size: 3,
20 max_pool_size: 24,
21 };
22 (workload, pool, SimulationOptions::default())
23}
24
25fn run_example() -> u32 {
26 let (workload, pool, options) = build_inputs();
27 let report = simulate(&workload, &pool, &options).expect("simulation should succeed");
28 report.optimal_pool_size
29}
30
31#[cfg(not(test))]
32fn main() {
33 let optimal = run_example();
34 println!("recommended pool size: {optimal}");
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn quickstart_example_runs() {
43 let optimal = run_example();
44 assert!(optimal >= 3);
45 }
46}