use std::time::Instant;
use accent_proust::{parse, transform};
const EXPANSIONS: u32 = 50;
const RUNS: u32 = 20;
fn main() {
let partial_source = "Some partial prose with a {% if $x %}branch{% /if %}.\n";
let mut page_source = String::new();
for _ in 0..EXPANSIONS {
page_source.push_str("{% partial file=\"p0.md\" /%}\n\n");
}
let page = parse::parse(&page_source);
for partial_count in [1usize, 10, 50, 200, 1000] {
let sources: Vec<String> = (0..partial_count)
.map(|_| partial_source.to_string())
.collect();
let mut config = accent_proust::builtins::config();
for (i, source) in sources.iter().enumerate() {
config
.partials_mut()
.insert(format!("p{i}.md"), parse::parse(source));
}
config.variables = Some(accent_proust::validate::Variables::new());
let _ = transform::transform(&page, &config);
let start = Instant::now();
for _ in 0..RUNS {
std::hint::black_box(transform::transform(&page, &config));
}
let elapsed = start.elapsed();
println!(
"partials={partial_count:>5} total {elapsed:>12.3?} per expansion {:>10.3?}",
elapsed / (RUNS * EXPANSIONS),
);
}
}