#![allow(dead_code)]
use opql::PQLRunner;
pub fn run(src: &str) -> (String, String) {
let mut out = Vec::new();
let mut err = Vec::new();
PQLRunner::run(src, &mut out, &mut err).unwrap();
(
String::from_utf8(out).unwrap(),
String::from_utf8(err).unwrap(),
)
}
pub fn run_ok(src: &str) -> String {
let (out, err) = run(src);
assert!(err.is_empty(), "unexpected stderr: {err}");
out
}
pub fn run_err(src: &str) -> String {
let (out, err) = run(src);
assert!(out.is_empty(), "unexpected stdout: {out}");
err
}
pub fn run_count(src: &str) -> usize {
let out = run_ok(src);
out.lines()
.find_map(|l| l.strip_prefix("COUNT 0 = "))
.and_then(|s| s.trim().parse::<usize>().ok())
.unwrap_or_else(|| panic!("no 'COUNT 0 = <n>' line in stdout:\n{out}"))
}
pub fn run_trials(src: &str) -> usize {
let out = run_ok(src);
out.lines()
.find_map(|l| l.strip_suffix(" trials"))
.and_then(|s| s.trim().parse::<usize>().ok())
.unwrap_or_else(|| panic!("no '<n> trials' line in stdout:\n{out}"))
}
pub fn assert_count_all(src: &str) {
let out = run_ok(src);
let trials = out
.lines()
.find_map(|l| l.strip_suffix(" trials"))
.and_then(|s| s.trim().parse::<usize>().ok())
.unwrap_or_else(|| panic!("no '<n> trials' line in stdout:\n{out}"));
let count = out
.lines()
.find_map(|l| l.strip_prefix("COUNT 0 = "))
.and_then(|s| s.trim().parse::<usize>().ok())
.unwrap_or_else(|| panic!("no 'COUNT 0 = <n>' line in stdout:\n{out}"));
assert_eq!(
count, trials,
"expected count == trials ({trials}), got {count}:\n{out}"
);
}
pub fn assert_count_none(src: &str) {
assert_eq!(run_count(src), 0);
}