1use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
2use edit_prediction_context::{CodeParts, IdentifierParts, OccurrenceSource};
3use rand::prelude::*;
4use rand::rngs::StdRng;
5use util::RandomCharIter;
6
7fn generate_random_text(mut rng: StdRng, text_len: usize) -> String {
8 RandomCharIter::new(&mut rng).take(text_len).collect()
9}
10
11fn text_similarity_benchmark(c: &mut Criterion) {
12 let rng = StdRng::seed_from_u64(42);
13 let sizes = [4, 16, 32, 1024];
14
15 let mut group = c.benchmark_group("hashed_identifier_parts");
16 for size in sizes.iter() {
17 group.throughput(Throughput::Bytes(*size as u64));
18 group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
19 let text = generate_random_text(rng.clone(), *size);
20 b.iter(|| IdentifierParts::occurrences_in_str(text.as_str()).collect::<Vec<_>>());
21 });
22 }
23 group.finish();
24
25 let mut group = c.benchmark_group("hashed_code_parts");
26 for size in sizes.iter() {
27 group.throughput(Throughput::Bytes(*size as u64));
28 group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
29 let text = generate_random_text(rng.clone(), *size);
30 b.iter(|| CodeParts::occurrences_in_str(text.as_str()).collect::<Vec<_>>());
31 });
32 }
33 group.finish();
34}
35
36criterion_group!(benches, text_similarity_benchmark);
37criterion_main!(benches);