Files
loot-condition-interpreter/benches/eval.rs
T
Oliver Hamlet f7db75bfea Stop using 7z binaries in test cases
They're not reliably available and are now causing CI failures. Instead
use libloot for the test cases that used 7z, and update it because older
versions of libloot incorrectly use "ProductVERSION " instead of
"ProductVersion".
2022-11-09 00:04:38 +00:00

138 lines
4.2 KiB
Rust

#[macro_use]
extern crate criterion;
extern crate loot_condition_interpreter;
use std::str::FromStr;
use criterion::Criterion;
use loot_condition_interpreter::{Expression, GameType, State};
fn generate_active_plugins() -> Vec<String> {
let mut vec: Vec<String> = (0..255).map(|i| format!("Blank{}.esm", i)).collect();
vec.push("Blank.esm".into());
vec
}
fn generate_plugin_versions() -> Vec<(String, String)> {
let mut vec: Vec<(String, String)> = (0..255)
.map(|i| (format!("Blank{}.esm", i), "5".to_string()))
.collect();
vec.push(("Blank.esm".into(), "5".into()));
vec
}
fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("Expression.eval() file(path)", |b| {
let state = State::new(GameType::Oblivion, ".".into(), ".".into());
let expression = Expression::from_str("file(\"Cargo.toml\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() file(regex)", |b| {
let state = State::new(GameType::Oblivion, ".".into(), ".".into());
let expression = Expression::from_str("file(\"Cargo.*\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() active(path)", |b| {
let state = State::new(
GameType::Oblivion,
"tests/testing-plugins/Oblivion/Data".into(),
".".into(),
)
.with_active_plugins(&generate_active_plugins());
let expression = Expression::from_str("active(\"Blank.esm\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() active(regex)", |b| {
let state = State::new(
GameType::Oblivion,
"tests/testing-plugins/Oblivion/Data".into(),
".".into(),
)
.with_active_plugins(&generate_active_plugins());
let expression = Expression::from_str("active(\"Blank.*\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() many()", |b| {
let state = State::new(GameType::Oblivion, ".".into(), ".".into());
let expression = Expression::from_str("many(\"Cargo.*\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() many_active()", |b| {
let state = State::new(
GameType::Oblivion,
"tests/testing-plugins/Oblivion/Data".into(),
".".into(),
)
.with_active_plugins(&generate_active_plugins());
let expression = Expression::from_str("many_active(\"Blank.*\")").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() checksum()", |b| {
let state = State::new(
GameType::Oblivion,
"tests/testing-plugins/Oblivion/Data".into(),
".".into(),
);
let expression = Expression::from_str("checksum(\"Blank.esm\", 374E2A6F)").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() version(plugin)", |b| {
let state = State::new(
GameType::Oblivion,
"tests/testing-plugins/Oblivion/Data".into(),
".".into(),
)
.with_plugin_versions(&generate_plugin_versions());
let expression = Expression::from_str("version(\"Blank.esm\", \"5.0\", ==)").unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
c.bench_function("Expression.eval() version(executable)", |b| {
let state = State::new(GameType::Oblivion, ".".into(), ".".into());
let expression =
Expression::from_str("version(\"tests/libloot_win32/loot.dll\", \"0.18.2.0\", ==)")
.unwrap();
b.iter(|| {
assert!(expression.eval(&state).unwrap());
});
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);