use codediff::diff::{ASTDiff, NodeCache};
use codediff::test::helper::optimal_iud::for_roots;
use criterion::{Criterion, black_box, criterion_group, criterion_main};
use std::time::Duration;
fn benchmark_optimal_iud_for_roots(c: &mut Criterion) {
let test_codes =
codediff::test::helper::handmade_test_code().expect("Failed to load test codes");
let test_code_pairs =
codediff::test::helper::handmade_test_code_pairs().expect("Failed to load test code pairs");
let mut group = c.benchmark_group("optimal_iud_find");
group.measurement_time(Duration::from_secs(60));
group.warm_up_time(Duration::from_secs(2));
for (test_name, (before, after)) in &test_code_pairs {
let benchmark_name = test_name
.replace(|c: char| !c.is_ascii_alphanumeric() && c != '_', "_")
.to_lowercase();
group.bench_function(benchmark_name, |b| {
let before = before.clone();
let after = after.clone();
b.iter(|| {
let mut diff = ASTDiff::default();
let node_cache = NodeCache::build(black_box(&before), black_box(&after));
for_roots(
black_box(&before),
black_box(&after),
black_box(&node_cache),
black_box(&mut diff),
)
.expect("find failed");
});
});
}
if let (Some(before_hello), Some(after_hello)) = (
test_codes.get("hello-world.rs"),
test_codes.get("zdravo-svijete.rs"),
) {
group.bench_function("hello_world_translation", |b| {
let before_hello = before_hello.clone();
let after_hello = after_hello.clone();
b.iter(|| {
let mut diff = ASTDiff::default();
let node_cache =
NodeCache::build(black_box(&before_hello), black_box(&after_hello));
for_roots(
black_box(&before_hello),
black_box(&after_hello),
black_box(&node_cache),
black_box(&mut diff),
)
.expect("find failed");
});
});
}
group.finish();
}
criterion_group! {
name = benches;
config = Criterion::default().configure_from_args();
targets = benchmark_optimal_iud_for_roots
}
criterion_main!(benches);