#!/bin/bash PROJECT_ROOT=$(cd "$(dirname "$0")/.." ; pwd) COMPILER="$PROJECT_ROOT/build/bin/compiler" TEST_DIR="$PROJECT_ROOT/test/test_case/basic" RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' if [ ! -f "$COMPILER" ]; then echo "错误: 编译器不存在: $COMPILER" exit 1 fi echo "==========================================" echo "RISC-V 浮点转换测试" echo "==========================================" TESTS=" float_conv:3 float_add:13 float_mul:30 " PASS=0 FAIL=0 for test in $TESTS; do name=$(echo $test | cut -d: -f1) expected=$(echo $test | cut -d: -f2) echo -n "测试 $name (期望 $expected) ... " "$COMPILER" "$TEST_DIR/$name.sy" --emit-asm > /tmp/test_$name.s 2>&1 if [ $? -ne 0 ]; then echo -e "${RED}失败 (汇编错误)${NC}" cat /tmp/test_$name.s | head -3 FAIL=$((FAIL + 1)) continue fi riscv64-linux-gnu-gcc -static /tmp/test_$name.s -o /tmp/test_$name -no-pie 2>/dev/null if [ $? -ne 0 ]; then echo -e "${RED}失败 (链接错误)${NC}" FAIL=$((FAIL + 1)) continue fi qemu-riscv64 /tmp/test_$name > /dev/null 2>&1 exit_code=$? if [ $exit_code -eq $expected ]; then echo -e "${GREEN}通过${NC}" PASS=$((PASS + 1)) else echo -e "${RED}失败 (实际 $exit_code)${NC}" FAIL=$((FAIL + 1)) fi done echo "==========================================" echo -e "测试结果: ${GREEN}通过 $PASS${NC} / ${RED}失败 $FAIL${NC}" echo "=========================================="