text_similarity_benchmark.rs

 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);