113 lines
2.9 KiB
Bash
113 lines
2.9 KiB
Bash
#!/bin/bash
|
|
# Smoke test: AOT vs VM execution comparison
|
|
# Tests that AOT-compiled programs produce the same results as VM execution
|
|
|
|
set -e
|
|
|
|
echo "=== Nyash AOT vs VM Smoke Test ==="
|
|
echo
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Test files
|
|
TEST_FILES=(
|
|
"examples/aot_min_string_len.hako"
|
|
"examples/aot_string_len_simple.hako"
|
|
"examples/jit_stats_bool_ret.hako"
|
|
"examples/aot_py_min_chain.hako"
|
|
)
|
|
|
|
# Counter for results
|
|
PASSED=0
|
|
FAILED=0
|
|
|
|
# Function to run test
|
|
run_test() {
|
|
local test_file=$1
|
|
local test_name=$(basename "$test_file" .hako)
|
|
|
|
echo "Testing: $test_name"
|
|
|
|
# Clean up previous artifacts
|
|
rm -f app /tmp/${test_name}_vm.out /tmp/${test_name}_aot.out
|
|
|
|
# Run with VM backend
|
|
echo -n " VM execution... "
|
|
if NYASH_USE_PLUGIN_BUILTINS=1 NYASH_PY_AUTODECODE=1 ./target/release/nyash --backend vm "$test_file" > /tmp/${test_name}_vm.out 2>&1; then
|
|
VM_RESULT=$(tail -1 /tmp/${test_name}_vm.out | grep -oP 'Result: \K.*' || echo "NO_RESULT")
|
|
echo "OK (Result: $VM_RESULT)"
|
|
else
|
|
echo -e "${RED}FAILED${NC}"
|
|
cat /tmp/${test_name}_vm.out
|
|
((FAILED++))
|
|
return
|
|
fi
|
|
|
|
# Compile to native
|
|
echo -n " AOT compilation... "
|
|
if NYASH_USE_PLUGIN_BUILTINS=1 ./target/release/nyash --compile-native "$test_file" -o app > /tmp/${test_name}_aot_compile.out 2>&1; then
|
|
echo "OK"
|
|
else
|
|
echo -e "${RED}FAILED${NC}"
|
|
cat /tmp/${test_name}_aot_compile.out
|
|
((FAILED++))
|
|
return
|
|
fi
|
|
|
|
# Run native executable
|
|
echo -n " Native execution... "
|
|
if ./app > /tmp/${test_name}_aot.out 2>&1; then
|
|
AOT_RESULT=$(grep -oP '^Result: \K.*' /tmp/${test_name}_aot.out || echo "NO_RESULT")
|
|
echo "OK (Result: $AOT_RESULT)"
|
|
else
|
|
echo -e "${RED}FAILED${NC}"
|
|
cat /tmp/${test_name}_aot.out
|
|
((FAILED++))
|
|
return
|
|
fi
|
|
|
|
# Compare results
|
|
echo -n " Comparing results... "
|
|
# Note: VM returns the actual value, AOT currently returns a numeric result
|
|
# This is expected behavior for now
|
|
if [[ "$VM_RESULT" != "NO_RESULT" && "$AOT_RESULT" != "NO_RESULT" ]]; then
|
|
echo -e "${GREEN}PASSED${NC} (VM: $VM_RESULT, AOT: $AOT_RESULT)"
|
|
((PASSED++))
|
|
else
|
|
echo -e "${RED}FAILED${NC} - Could not extract results"
|
|
((FAILED++))
|
|
fi
|
|
|
|
echo
|
|
}
|
|
|
|
# Run tests
|
|
for test_file in "${TEST_FILES[@]}"; do
|
|
if [[ -f "$test_file" ]]; then
|
|
run_test "$test_file"
|
|
else
|
|
echo "Warning: Test file not found: $test_file"
|
|
((FAILED++))
|
|
fi
|
|
done
|
|
|
|
# Summary
|
|
echo "=== Test Summary ==="
|
|
echo -e "Passed: ${GREEN}$PASSED${NC}"
|
|
echo -e "Failed: ${RED}$FAILED${NC}"
|
|
|
|
# Clean up
|
|
rm -f app
|
|
|
|
# Exit with appropriate code
|
|
if [[ $FAILED -eq 0 ]]; then
|
|
echo -e "\n${GREEN}All tests passed!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "\n${RED}Some tests failed!${NC}"
|
|
exit 1
|
|
fi
|