#![allow(dead_code)]
use std::path::{Path, PathBuf};
use std::time::{Duration, Instant};
pub fn fixture_path() -> PathBuf {
match std::env::var("INKHAVEN_BENCH_FIXTURE") {
Ok(p) => {
let path = PathBuf::from(p);
if !path.join("metadata.db").exists() {
panic!(
"INKHAVEN_BENCH_FIXTURE points at `{}` but no \
`metadata.db` was found there. Run \
`./target/release/inkhaven gen-fixture <path>` \
to generate one.",
path.display(),
);
}
path
}
Err(_) => panic!(
"INKHAVEN_BENCH_FIXTURE is unset. Generate a fixture with \
`./target/release/inkhaven gen-fixture /tmp/inkhaven-bench` \
and re-run with `INKHAVEN_BENCH_FIXTURE=/tmp/inkhaven-bench \
cargo bench`."
),
}
}
pub fn inkhaven_binary() -> PathBuf {
let target_dir = std::env::var("CARGO_TARGET_DIR")
.map(PathBuf::from)
.unwrap_or_else(|_| PathBuf::from("target"));
let bin = target_dir.join("release").join("inkhaven");
if !bin.exists() {
panic!(
"expected the release binary at `{}` — run \
`cargo build --release` before `cargo bench`.",
bin.display(),
);
}
bin
}
pub fn run_inkhaven_against(
project: &Path,
args: &[&str],
) -> Duration {
let bin = inkhaven_binary();
let start = Instant::now();
let output = std::process::Command::new(&bin)
.arg("--project")
.arg(project)
.args(args)
.output()
.unwrap_or_else(|e| {
panic!("spawn {} {args:?}: {e}", bin.display())
});
let elapsed = start.elapsed();
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
panic!(
"inkhaven {args:?} exited {:?}: {}",
output.status.code(),
stderr.trim(),
);
}
elapsed
}
pub fn run_inkhaven_bare(args: &[&str]) -> Duration {
let bin = inkhaven_binary();
let start = Instant::now();
let output = std::process::Command::new(&bin)
.args(args)
.output()
.unwrap_or_else(|e| {
panic!("spawn {} {args:?}: {e}", bin.display())
});
let elapsed = start.elapsed();
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
panic!(
"inkhaven {args:?} exited {:?}: {}",
output.status.code(),
stderr.trim(),
);
}
elapsed
}