use std::{env, fs::File, io::Write};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use redact_engine::{Pattern, Redaction};
use regex::Regex;
mod utils;
const TEXT: &str = "redact example benchmarking test with the detections text: foo,bar,baz";
fn get_redact_patterns(count: usize) -> Redaction {
let mut patterns = vec![
Pattern {
test: Regex::new("(foo)").unwrap(),
group: 1,
},
Pattern {
test: Regex::new("(bar)").unwrap(),
group: 1,
},
Pattern {
test: Regex::new("(baz)").unwrap(),
group: 1,
},
];
for _ in 0..count - patterns.len() {
patterns.push(Pattern {
test: Regex::new(&format!("({})", utils::get_random_string(10))).unwrap(),
group: 1,
});
}
Redaction::new().add_patterns(patterns)
}
fn get_redact_values(count: usize) -> Redaction {
let mut values = vec!["foo", "bar", "baz"];
let mut random_values = vec![];
for _ in 0..count - values.len() {
random_values.push(utils::get_random_string(10));
}
random_values.iter().for_each(|s| values.push(s.as_str()));
Redaction::new().add_values(values).unwrap()
}
fn redact_str_benchmark(c: &mut Criterion) {
let file_path = env::temp_dir().join("bench_test.txt");
let mut f = File::create(&file_path).unwrap();
#[allow(clippy::unused_io_amount)]
f.write(TEXT.as_bytes()).unwrap();
let redaction_with_patterns = get_redact_patterns(100);
let redaction_with_values = get_redact_values(100);
let mut banch_group = c.benchmark_group("redact_str");
banch_group.sample_size(1_0000);
banch_group.bench_function("redact_str_from_patterns", |b| {
b.iter(|| redaction_with_patterns.redact_str(black_box(TEXT)));
});
banch_group.bench_function("redact_str_from_values", |b| {
b.iter(|| redaction_with_values.redact_str(black_box(TEXT)));
});
banch_group.bench_function("redact_str_from_reader", |b| {
b.iter(|| redaction_with_values.redact_reader(black_box(File::open(&file_path).unwrap())));
});
banch_group.bench_function("redact_str_with_info", |b| {
b.iter(|| redaction_with_values.redact_str_with_info(black_box(TEXT)));
});
banch_group.finish();
}
criterion_group!(benches, redact_str_benchmark);
criterion_main!(benches);