use sui_bytecode::StringKeyedValue as Skv;
fn walker_skv(expr: &str) -> Result<Skv, String> {
let raw = sui_eval::eval(expr).map_err(|e| e.to_string())?;
let forced = sui_eval::eval::force_value(&raw).map_err(|e| e.to_string())?;
Ok(sui_eval::eval_to_string_keyed(&forced))
}
fn vm_skv(expr: &str) -> Result<Skv, String> {
sui_bytecode::eval_full(expr)
.map(|r| r.to_string_keyed())
.map_err(|e| e.to_string())
}
fn assert_bridged_parity(expr: &str, expected: &Skv) {
let walker = walker_skv(expr)
.unwrap_or_else(|e| panic!("tree-walker failed for `{expr}`: {e}"));
let vm = vm_skv(expr).unwrap_or_else(|e| panic!("bytecode VM failed for `{expr}`: {e}"));
assert_eq!(
&walker, expected,
"the ORACLE moved for `{expr}` — fix the expectation, not the VM"
);
assert_eq!(
vm, walker,
"bridged parity mismatch for `{expr}`\n tree-walker => {walker:?}\n bytecode VM => {vm:?}"
);
}
#[test]
fn fs_builtins_agree_with_the_walker_on_a_registered_input_source() {
let _bridges = sui_eval::install_vm_bridges();
let real = std::env::temp_dir().join("sui_vm_bridge_parity_fs");
std::fs::create_dir_all(&real).unwrap();
std::fs::write(real.join("Cargo.lock"), "hello").unwrap();
std::fs::write(real.join("mod.nix"), "{ answer = 42; }").unwrap();
let store = "/nix/store/1111111111111111111111111111111-source";
assert!(
!std::path::Path::new(store).exists(),
"the fixture store path must NOT exist on disk"
);
sui_eval::path::register_input_source(std::path::Path::new(store), &real);
assert_bridged_parity(
&format!(r#"builtins.pathExists "{store}/Cargo.lock""#),
&Skv::Bool(true),
);
assert_bridged_parity(
&format!(r#"builtins.pathExists "{store}/does-not-exist""#),
&Skv::Bool(false),
);
assert_bridged_parity(
&format!(r#"builtins.readFile "{store}/Cargo.lock""#),
&Skv::String("hello".to_string()),
);
assert_bridged_parity(
&format!(r#"builtins.readFileType "{store}/Cargo.lock""#),
&Skv::String("regular".to_string()),
);
assert_bridged_parity(
&format!(r#"builtins.readFileType "{store}""#),
&Skv::String("directory".to_string()),
);
assert_bridged_parity(
&format!(r#"(import {store}/mod.nix).answer"#),
&Skv::Int(42),
);
assert_bridged_parity(
&format!(r#"builtins.hashFile "sha256" "{store}/Cargo.lock""#),
&Skv::String(
"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824".to_string(),
),
);
std::fs::remove_dir_all(&real).ok();
}
#[test]
fn an_unregistered_store_path_reads_as_absent_on_both_engines() {
let _bridges = sui_eval::install_vm_bridges();
let store = "/nix/store/2222222222222222222222222222222-source";
assert!(!std::path::Path::new(store).exists());
assert_bridged_parity(
&format!(r#"builtins.pathExists "{store}/Cargo.lock""#),
&Skv::Bool(false),
);
}
#[test]
fn with_scope_shadows_every_name_that_is_not_a_real_nix_global() {
let _bridges = sui_eval::install_vm_bridges();
for name in [
"isFunction",
"typeOf",
"functionArgs",
"pathExists",
"readFile",
"readDir",
"isAttrs",
"isList",
"isString",
"isInt",
"isBool",
"isFloat",
"isPath",
"seq",
"deepSeq",
"tryEval",
"trace",
"toFile",
"toPath",
"fromJSON",
"toJSON",
"genericClosure",
"addErrorContext",
"unsafeGetAttrPos",
"storeDir",
"nixVersion",
"nixPath",
"currentSystem",
"currentTime",
"langVersion",
] {
assert_bridged_parity(
&format!(r#"with {{ {name} = x: "LIB"; }}; {name} 1"#),
&Skv::String("LIB".to_string()),
);
}
}
#[test]
fn a_real_global_still_wins_over_a_with_scope() {
let _bridges = sui_eval::install_vm_bridges();
for name in sui_compat::scope::CALLABLE_GLOBALS.iter().copied() {
let expr = format!(r#"with {{ {name} = "LIB"; }}; {name} == "LIB""#);
let vm = vm_skv(&expr).unwrap_or_else(|e| panic!("bytecode VM failed for `{expr}`: {e}"));
assert_eq!(
vm,
Skv::Bool(false),
"`{name}` is a real nix global — a `with` must not shadow it (nix: false)"
);
}
}
#[test]
fn a_bare_non_global_builtin_is_rejected_the_way_nix_rejects_it() {
let _bridges = sui_eval::install_vm_bridges();
for expr in ["typeOf 1", "isFunction 1", "pathExists \"/tmp\"", "storeDir"] {
assert!(
walker_skv(expr).is_err(),
"the ORACLE moved: `{expr}` must be an undefined variable"
);
assert!(
vm_skv(expr).is_err(),
"`{expr}` must not resolve on the VM — nix has no such global"
);
}
}
#[test]
fn builtins_attrset_advertises_every_name_the_vm_can_dispatch() {
let _bridges = sui_eval::install_vm_bridges();
for name in [
"builtins",
"path",
"parseFlakeRef",
"flakeRefToString",
"readDir",
"hashFile",
"toFile",
"convertHash",
"filterSource",
"toXML",
"getEnv",
"genericClosure",
"currentSystem",
"nixVersion",
"storeDir",
] {
assert_bridged_parity(&format!("builtins ? {name}"), &Skv::Bool(true));
}
for name in ["definitelyNotABuiltin", "isFunctionButNamedWrong"] {
assert_bridged_parity(&format!("builtins ? {name}"), &Skv::Bool(false));
}
}
#[test]
fn builtins_builtins_is_the_builtins_attrset() {
let _bridges = sui_eval::install_vm_bridges();
assert_bridged_parity("builtins.builtins ? getEnv", &Skv::Bool(true));
assert_bridged_parity("builtins.builtins ? path", &Skv::Bool(true));
assert_bridged_parity("builtins.builtins.storeDir", &Skv::String("/nix/store".into()));
assert_bridged_parity("builtins.builtins.langVersion", &Skv::Int(6));
}