use regex::RegexBuilder;
use std::collections::HashMap;
use std::time::SystemTime;
use subplot::{Binding, Bindings, ScenarioStep, StepKind};
const N: i32 = 1000;
#[test]
fn bindings_microbenchmark() {
let time = SystemTime::now();
let mut texts = vec![];
for i in 0..N {
texts.push(format!("step {}", i));
}
let texted = time.elapsed().unwrap();
let mut re = vec![];
for t in texts.iter() {
re.push((
t,
RegexBuilder::new(&format!("^{}$", t))
.case_insensitive(false)
.build()
.unwrap(),
));
}
let regexed = time.elapsed().unwrap();
let mut toadd = vec![];
for t in texts.iter() {
toadd.push(Binding::new(StepKind::Given, t, false, HashMap::new()).unwrap());
}
let created = time.elapsed().unwrap();
let mut bindings = Bindings::new();
for binding in toadd {
bindings.add(binding);
}
let added = time.elapsed().unwrap();
let step = ScenarioStep::new(StepKind::Given, "given", &format!("step {}", N - 1));
bindings.find("", &step).unwrap();
let found = time.elapsed().unwrap();
println!("texted: {}", texted.as_millis());
println!("regexed: {}", regexed.as_millis());
println!("created: {}", created.as_millis());
println!("added: {}", added.as_millis());
println!("found: {}", found.as_millis());
}