test: Phase 132 LLVM EXE regression smoke (minimal)
This commit is contained in:
19
apps/tests/phase132_return_loop_var_min.hako
Normal file
19
apps/tests/phase132_return_loop_var_min.hako
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// Phase 132: Minimal test for loop variable return value
|
||||||
|
//
|
||||||
|
// Tests that exit PHI correctly returns the final loop variable value
|
||||||
|
// (not the initial value or module-level garbage).
|
||||||
|
//
|
||||||
|
// Expected output: RC:3
|
||||||
|
// - loop runs 3 iterations (i=0,1,2)
|
||||||
|
// - returns final i value (3)
|
||||||
|
|
||||||
|
static box Main {
|
||||||
|
main() {
|
||||||
|
local i
|
||||||
|
i = 0
|
||||||
|
loop(i < 3) {
|
||||||
|
i = i + 1
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Phase 132: Exit PHI value parity smoke test
|
||||||
|
# Tests: Loop variable return via exit PHI (VM/LLVM parity)
|
||||||
|
|
||||||
|
source "$(dirname "$0")/../../../lib/test_runner.sh"
|
||||||
|
export SMOKES_USE_PYVM=0
|
||||||
|
require_env || exit 2
|
||||||
|
|
||||||
|
# Check LLVM availability (SKIP if not found)
|
||||||
|
if ! command -v llvm-config-18 &> /dev/null; then
|
||||||
|
test_skip "llvm-config-18 not found"; exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check hakorune LLVM backend availability
|
||||||
|
if ! "$NYASH_BIN" --help 2>&1 | grep -q "llvm"; then
|
||||||
|
test_skip "hakorune --backend llvm not available"; exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Python llvmlite
|
||||||
|
if ! python3 -c "import llvmlite" 2>/dev/null; then
|
||||||
|
test_skip "Python llvmlite not found"; exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create tmp directory
|
||||||
|
mkdir -p "$NYASH_ROOT/tmp"
|
||||||
|
|
||||||
|
PASS_COUNT=0
|
||||||
|
FAIL_COUNT=0
|
||||||
|
|
||||||
|
# ===== Case A: Simple loop return =====
|
||||||
|
echo "[INFO] Case A: phase132_return_loop_var_min.hako"
|
||||||
|
|
||||||
|
INPUT_A="$NYASH_ROOT/apps/tests/phase132_return_loop_var_min.hako"
|
||||||
|
OUTPUT_A="$NYASH_ROOT/tmp/phase132_return_loop_var_min"
|
||||||
|
|
||||||
|
if "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_A" -o "$OUTPUT_A" > /tmp/phase132_a_build.log 2>&1; then
|
||||||
|
if [ -x "$OUTPUT_A" ]; then
|
||||||
|
set +e
|
||||||
|
"$OUTPUT_A" > /dev/null 2>&1
|
||||||
|
EXIT_CODE=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EXIT_CODE" -eq 3 ]; then
|
||||||
|
echo "[PASS] Case A: exit code 3 verified"
|
||||||
|
((PASS_COUNT++))
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case A: Expected exit code 3, got $EXIT_CODE"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case A: Executable not created"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case A: build_llvm.sh failed"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ===== Case B: Complex loop with early exit =====
|
||||||
|
echo "[INFO] Case B: llvm_stage3_loop_only.hako"
|
||||||
|
|
||||||
|
INPUT_B="$NYASH_ROOT/apps/tests/llvm_stage3_loop_only.hako"
|
||||||
|
OUTPUT_B="$NYASH_ROOT/tmp/llvm_stage3_loop_only"
|
||||||
|
|
||||||
|
if "$NYASH_ROOT/tools/build_llvm.sh" "$INPUT_B" -o "$OUTPUT_B" > /tmp/phase132_b_build.log 2>&1; then
|
||||||
|
if [ -x "$OUTPUT_B" ]; then
|
||||||
|
set +e
|
||||||
|
OUTPUT=$("$OUTPUT_B" 2>&1)
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if echo "$OUTPUT" | grep -q "Result: 3"; then
|
||||||
|
echo "[PASS] Case B: stdout contains 'Result: 3'"
|
||||||
|
((PASS_COUNT++))
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case B: Expected stdout to contain 'Result: 3'"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case B: Executable not created"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "[FAIL] Case B: build_llvm.sh failed"
|
||||||
|
((FAIL_COUNT++))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ===== Summary =====
|
||||||
|
echo "[INFO] PASS: $PASS_COUNT, FAIL: $FAIL_COUNT"
|
||||||
|
|
||||||
|
if [ "$FAIL_COUNT" -eq 0 ]; then
|
||||||
|
test_pass "phase132_exit_phi_parity: All tests passed"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
test_fail "phase132_exit_phi_parity: $FAIL_COUNT test(s) failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user