use formcalc::{Engine, Formula};
use std::time::Instant;
fn main() {
println!("=== Parallel Execution Benchmark ===\n");
benchmark_independent_formulas();
benchmark_layered_dependencies();
benchmark_complex_formulas();
}
fn benchmark_independent_formulas() {
println!("Test 1: Independent Formulas");
println!("-----------------------------");
let mut engine = Engine::new();
let formulas: Vec<Formula> = (0..100)
.map(|i| {
Formula::new(
format!("formula_{}", i),
format!("return {} + {} * {} - {}", i, i + 1, i + 2, i + 3),
)
})
.collect();
let start = Instant::now();
engine.execute(formulas).unwrap();
let duration = start.elapsed();
println!("Executed 100 independent formulas in {:?}", duration);
println!("All formulas executed in parallel (single layer)\n");
}
fn benchmark_layered_dependencies() {
println!("Test 2: Layered Dependencies");
println!("-----------------------------");
let mut engine = Engine::new();
let mut formulas = Vec::new();
for i in 0..20 {
formulas.push(Formula::new(
format!("base_{}", i),
format!("return {}", i * 10),
));
}
for i in 0..20 {
let dep_idx = i % 20;
formulas.push(Formula::new(
format!("layer1_{}", i),
format!("return get_output_from('base_{}') + 5", dep_idx),
));
}
for i in 0..20 {
let dep_idx = i % 20;
formulas.push(Formula::new(
format!("layer2_{}", i),
format!("return get_output_from('layer1_{}') * 2", dep_idx),
));
}
let start = Instant::now();
engine.execute(formulas).unwrap();
let duration = start.elapsed();
println!("Executed 60 formulas in 3 layers in {:?}", duration);
println!("20 formulas per layer executed in parallel\n");
}
fn benchmark_complex_formulas() {
println!("Test 3: Complex Formulas");
println!("------------------------");
let mut engine = Engine::new();
let formulas: Vec<Formula> = (0..50)
.map(|i| {
Formula::new(
format!("complex_{}", i),
format!(
"if ({} > 25) then return max({}, {}) * rnd(3.14159, 2) else return min({}, {}) + floor(2.7) end",
i, i, i + 1, i, i + 1
),
)
})
.collect();
let start = Instant::now();
engine.execute(formulas).unwrap();
let duration = start.elapsed();
println!("Executed 50 complex formulas in {:?}", duration);
println!("All formulas executed in parallel with conditional logic\n");
}