use std::path::PathBuf;
use std::process::Command;
fn fixture(name: &str) -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests/fixtures")
.join(name)
}
fn tool_available(tool: &str) -> bool {
Command::new(tool).arg("--version").output().is_ok()
}
#[test]
fn hybrid_verify_matches_cpython_on_whole_float_fixture() {
if !tool_available("cc") || !tool_available("python3") || !tool_available("cargo") {
eprintln!("cc/python3/cargo unavailable — skipping float hybrid --verify test");
return;
}
let out = Command::new(env!("CARGO_BIN_EXE_xpile"))
.arg("hybrid")
.arg(fixture("hybrid_scale2"))
.arg("--verify")
.output()
.expect("run xpile hybrid --verify");
let stdout = String::from_utf8_lossy(&out.stdout);
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
out.status.success(),
"verify of the c_double hybrid_scale2 fixture must exit 0 (MATCH);\nstdout:\n{stdout}\nstderr:\n{stderr}"
);
assert!(
stdout.contains("scale2 : Python → C"),
"expected the c_double C boundary to reconcile:\n{stdout}"
);
assert!(
stdout.contains("✓ MATCH") && stdout.contains("\"10.0\""),
"expected a MATCH verdict on the whole-float \"10.0\" (not \"10\"):\n{stdout}"
);
}