test: Phase 117 if-only nested-if call merge parity (VM + LLVM EXE)
Fixture & Smoke tests for nested if-only with call merge verification. **Fixture**: - apps/tests/phase117_if_only_nested_if_call_merge_min.hako - Pattern: nested if (inner: b == 1) inside outer if (a == 1), outer else - Call merge: f(1), f(2), f(3) results merged to single variable v - Expected output: 2, 3, 4 (f(x) = x + 1) **VM Smoke**: - tools/smokes/v2/profiles/integration/apps/phase117_if_only_nested_if_call_merge_vm.sh - Execution: NYASH_DISABLE_PLUGINS=1 HAKO_JOINIR_STRICT=1 - Validation: numeric output 3 lines "2\n3\n4" **LLVM EXE Smoke**: - tools/smokes/v2/profiles/integration/apps/phase117_if_only_nested_if_call_merge_llvm_exe.sh - Required plugins: FileBox, MapBox, StringBox, ConsoleBox, IntegerBox - Validation: numeric output "2\n3\n4" (3 lines) **Verification**: ✅ VM smoke: PASS ✅ LLVM EXE smoke: PASS ✅ Regression (Phase 116): PASS 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
18
apps/tests/phase117_if_only_nested_if_call_merge_min.hako
Normal file
18
apps/tests/phase117_if_only_nested_if_call_merge_min.hako
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
static box Main {
|
||||||
|
f(x) { return x + 1 }
|
||||||
|
g(a, b) {
|
||||||
|
local v = 0
|
||||||
|
if a == 1 {
|
||||||
|
if b == 1 { v = f(1) } else { v = f(2) }
|
||||||
|
} else {
|
||||||
|
v = f(3)
|
||||||
|
}
|
||||||
|
print(v)
|
||||||
|
}
|
||||||
|
main() {
|
||||||
|
g(1, 1) // → 2 (f(1) = 1+1)
|
||||||
|
g(1, 0) // → 3 (f(2) = 2+1)
|
||||||
|
g(0, 0) // → 4 (f(3) = 3+1)
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Phase 117: if-only nested-if + call merge parity (LLVM EXE)
|
||||||
|
|
||||||
|
source "$(dirname "$0")/../../../lib/test_runner.sh"
|
||||||
|
source "$(dirname "$0")/../../../lib/llvm_exe_runner.sh"
|
||||||
|
export SMOKES_USE_PYVM=0
|
||||||
|
require_env || exit 2
|
||||||
|
|
||||||
|
llvm_exe_preflight_or_skip || exit 0
|
||||||
|
|
||||||
|
# Phase 97/98/100 SSOT: plugin dlopen check → build only if needed → dlopen recheck.
|
||||||
|
FILEBOX_SO="$NYASH_ROOT/plugins/nyash-filebox-plugin/libnyash_filebox_plugin.so"
|
||||||
|
MAPBOX_SO="$NYASH_ROOT/plugins/nyash-map-plugin/libnyash_map_plugin.so"
|
||||||
|
STRINGBOX_SO="$NYASH_ROOT/plugins/nyash-string-plugin/libnyash_string_plugin.so"
|
||||||
|
CONSOLEBOX_SO="$NYASH_ROOT/plugins/nyash-console-plugin/libnyash_console_plugin.so"
|
||||||
|
INTEGERBOX_SO="$NYASH_ROOT/plugins/nyash-integer-plugin/libnyash_integer_plugin.so"
|
||||||
|
|
||||||
|
LLVM_REQUIRED_PLUGINS=(
|
||||||
|
"FileBox|$FILEBOX_SO|nyash-filebox-plugin"
|
||||||
|
"MapBox|$MAPBOX_SO|nyash-map-plugin"
|
||||||
|
"StringBox|$STRINGBOX_SO|nyash-string-plugin"
|
||||||
|
"ConsoleBox|$CONSOLEBOX_SO|nyash-console-plugin"
|
||||||
|
"IntegerBox|$INTEGERBOX_SO|nyash-integer-plugin"
|
||||||
|
)
|
||||||
|
LLVM_PLUGIN_BUILD_LOG="/tmp/phase117_if_only_nested_if_call_merge_plugin_build.log"
|
||||||
|
llvm_exe_ensure_plugins_or_fail || exit 1
|
||||||
|
|
||||||
|
INPUT_HAKO="$NYASH_ROOT/apps/tests/phase117_if_only_nested_if_call_merge_min.hako"
|
||||||
|
OUTPUT_EXE="$NYASH_ROOT/tmp/phase117_if_only_nested_if_call_merge_llvm_exe"
|
||||||
|
|
||||||
|
EXPECTED=$'2\n3\n4'
|
||||||
|
EXPECTED_LINES=3
|
||||||
|
LLVM_BUILD_LOG="/tmp/phase117_if_only_nested_if_call_merge_build.log"
|
||||||
|
if llvm_exe_build_and_run_numeric_smoke; then
|
||||||
|
test_pass "phase117_if_only_nested_if_call_merge_llvm_exe: output matches expected (2\\n3\\n4)"
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
source "$SCRIPT_DIR/../../../lib/output_validator.sh"
|
||||||
|
|
||||||
|
FIXTURE="apps/tests/phase117_if_only_nested_if_call_merge_min.hako"
|
||||||
|
|
||||||
|
echo "[phase117_if_only_nested_if_call_merge_vm] Testing nested if + call merge parity (VM)..."
|
||||||
|
|
||||||
|
# VM execution with STRICT mode
|
||||||
|
OUTPUT=$(NYASH_DISABLE_PLUGINS=1 HAKO_JOINIR_STRICT=1 ./target/release/hakorune --backend vm "$FIXTURE" 2>&1) || {
|
||||||
|
echo "❌ VM execution failed"
|
||||||
|
echo "$OUTPUT"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validate: expect 3 lines with values 2, 3, 4
|
||||||
|
validate_numeric_output 3 "2
|
||||||
|
3
|
||||||
|
4" "$OUTPUT"
|
||||||
|
|
||||||
|
echo "✅ [phase117_if_only_nested_if_call_merge_vm] PASS"
|
||||||
Reference in New Issue
Block a user