Files
sausage/spikes/s2-shell/compare.nu
T
surma 9e9cde5241 spikes: six v3 spikes (V8 harness, WASI shell, git, builder, http hook, esbuild)
Throwaway prototypes for Sausage v3. Plan and decisions:
~/research/sausage-v3/PLAN.md. Results and evidence: the spike READMEs.
2026-11-06 14:03:20 +00:00

43 lines
2.0 KiB
Nu

#!/usr/bin/env nu
# Compare one shell script with bash. Keep both streams and exact exit codes.
def main [host: path, shell: path] {
let base = '/tmp/s2-shell/comparison'
mkdir $base
for name in [native guest] {
let root = ($base | path join $name)
mkdir ($root | path join work sub) ($root | path join other) ($root | path join bin) ($root | path join dev)
"alpha\n" | save -f ($root | path join work f)
"one\ntwo\n" | save -f ($root | path join work file)
'' | save -f ($root | path join work a.txt)
'' | save -f ($root | path join work b.txt)
"before\n" | save -f ($root | path join work log)
'' | save -f ($root | path join dev 'null')
for tool in [cat tr ls wc yes head] {
cp --force ($env.FILE_PWD | path join userland target wasm32-wasip2 release s2-userland.wasm) ($root | path join bin $tool)
}
}
let script = (open --raw ($env.FILE_PWD | path join corpus.sh))
let native_root = ($base | path join native)
let native = (do { cd $native_root; ^bash --noprofile --norc -c $script } | complete)
let stdout = ($native.stdout | str replace --all $native_root '')
$stdout | save -f ($base | path join native.stdout)
$native.stderr | save -f ($base | path join native.stderr)
print $'native exit=($native.exit_code)'
let start = (date now)
let guest = (^$host ($base | path join guest) $shell -c $script | complete)
print $'guest elapsed=((date now) - $start)'
$guest.stdout | save -f ($base | path join guest.stdout)
$guest.stderr | save -f ($base | path join guest.stderr)
print $'guest exit=($guest.exit_code)'
print $'equal stdout=($stdout == $guest.stdout)'
print '--- native stdout ---'
print $stdout
print '--- guest stdout ---'
print $guest.stdout
print '--- guest stderr ---'
print $guest.stderr
if $native.exit_code != $guest.exit_code or $stdout != $guest.stdout {
error make {msg: 'shell comparison failed'}
}
}