#!/bin/bash

# 定义输入目录
input_dir="./tmp"

# 获取tmp目录下的所有符合条件的可执行文件，并按前缀数字升序排序
executable_files=$(ls "$input_dir" | grep -E '^[0-9]+_.*' | grep -E '_gcc_riscv32$|_sysyc_riscv32$' | sort -t '_' -k1,1n)

# 用于存储前缀数字和返回值
declare -A gcc_results
declare -A sysyc_results

# 遍历所有符合条件的可执行文件
for file in $executable_files; do
    # 提取文件名前缀和后缀
    prefix=$(echo "$file" | cut -d '_' -f 1)
    suffix=$(echo "$file" | cut -d '_' -f 2)

    # 检查是否已经处理过该前缀的两个文件
    if [[ ${gcc_results["$prefix"]} && ${sysyc_results["$prefix"]} ]]; then
        continue
    fi

    # 执行可执行文件并捕获返回值
    echo "Executing: $file"
    qemu-riscv32 "$input_dir/$file"
    ret_code=$?

    # 明确记录返回值
    echo "Return code for $file: $ret_code"

    # 根据后缀存储返回值
    if [[ "$suffix" == "gcc" ]]; then
        gcc_results["$prefix"]=$ret_code
    elif [[ "$suffix" == "sysyc" ]]; then
        sysyc_results["$prefix"]=$ret_code
    fi

    # 如果同一个前缀的两个文件都已执行，比较它们的返回值
    if [[ ${gcc_results["$prefix"]} && ${sysyc_results["$prefix"]} ]]; then
        gcc_ret=${gcc_results["$prefix"]}
        sysyc_ret=${sysyc_results["$prefix"]}
        if [[ "$gcc_ret" -ne "$sysyc_ret" ]]; then
            echo -e "\e[31mWARNING: Return codes differ for prefix $prefix: _gcc=$gcc_ret, _sysyc=$sysyc_ret\e[0m"
        else
            echo "Return codes match for prefix $prefix: $gcc_ret"
        fi
    fi
done
