diff --git a/apps/tests/phase100_pinned_local_receiver_min.hako b/apps/tests/phase100_pinned_local_receiver_min.hako new file mode 100644 index 00000000..8941c476 --- /dev/null +++ b/apps/tests/phase100_pinned_local_receiver_min.hako @@ -0,0 +1,21 @@ +// Phase 100 P1-5-1: Pinned Local Receiver Fixture +// Tests that loop-outer dynamic string can be used as receiver inside loop + +static box Main { + main() { + // Dynamic string construction (loop-outer) + local s + s = "a" + "b" + "c" + + // Loop using s as receiver (requires Pinned capture) + // Note: loop(i < 1) currently runs 3 iterations (0,1,2) - see loop semantics + local i + i = 0 + loop(i < 1) { + local ch + ch = s.substring(i, i + 1) + print(i) + i = i + 1 + } + } +} diff --git a/tools/smokes/v2/profiles/integration/apps/phase100_pinned_local_receiver_vm.sh b/tools/smokes/v2/profiles/integration/apps/phase100_pinned_local_receiver_vm.sh new file mode 100644 index 00000000..20153442 --- /dev/null +++ b/tools/smokes/v2/profiles/integration/apps/phase100_pinned_local_receiver_vm.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Smoke test: Phase 100 pinned local receiver (VM backend) + +HAKO_FILE="apps/tests/phase100_pinned_local_receiver_min.hako" +BACKEND="vm" +EXPECTED_OUTPUT="0 +1 +2" + +# Run with HAKO_JOINIR_STRICT=1 (strict validation) +ACTUAL_OUTPUT=$(HAKO_JOINIR_STRICT=1 ./target/release/hakorune --backend "$BACKEND" "$HAKO_FILE" 2>&1 | grep -E '^[0-9]+$') + +if [ "$ACTUAL_OUTPUT" = "$EXPECTED_OUTPUT" ]; then + echo "✅ PASS: phase100_pinned_local_receiver_vm" + exit 0 +else + echo "❌ FAIL: phase100_pinned_local_receiver_vm" + echo "Expected:" + echo "$EXPECTED_OUTPUT" + echo "Got:" + echo "$ACTUAL_OUTPUT" + echo "---Full output (last 80 lines):---" + HAKO_JOINIR_STRICT=1 ./target/release/hakorune --backend "$BACKEND" "$HAKO_FILE" 2>&1 | tail -n 80 + exit 1 +fi