对拍

假设待验证代码为 1.cpp,暴力程序为 bl.cpp,数据生成器为 dm.py

bash

无限循环:

while true; do
  python dm.py >in
  ./1 <in >out1
  ./bl <in >outbl
  if ! diff outbl out1; then
    break
  fi
done

限制次数(ChatGPT 生成的):

#!/bin/bash
num_tests=100  # 设定测试次数
for ((i=1; i<=num_tests; i++)); do
    ./generator > input.txt
    ./brute < input.txt > brute_output.txt
    ./optimized < input.txt > optimized_output.txt

    if ! diff brute_output.txt optimized_output.txt > /dev/null; then
        echo "Mismatch found on test $i"
        echo "Input:"
        cat input.txt
        echo "Brute output:"
        cat brute_output.txt
        echo "Optimized output:"
        cat optimized_output.txt
        exit 1
    fi
    echo "Test $i passed!"
done
echo "All tests passed!"

fish

while true
    python dm.py >in
    cat in | ./1 >out1
    cat in | ./bl >outbl
    diff out1 outbl
    if test $status -ne 0
        break
    end
end

cmd

@echo off
:loop
  python dm.py > in
  1.exe < in > out1
  bl.exe < in > outbl
  fc out1 outbl
if not errorlevel 1 goto loop

powershell

ChatGPT 写的,没经过测试。

while ($true) {
  # 生成测试数据
  ./generator.exe > input.txt

  # 运行暴力算法
  ./brute.exe < input.txt > brute_output.txt

  # 运行优化算法
  ./optimized.exe < input.txt > optimized_output.txt

  # 比较输出
  if (!(Compare-Object (Get-Content brute_output.txt) `
                      (Get-Content optimized_output.txt))) {
    Write-Output "Test passed!"
  } else {
    Write-Output "Mismatch found!"
    Write-Output "Input:"
    Get-Content input.txt
    Write-Output "Brute output:"
    Get-Content brute_output.txt
    Write-Output "Optimized output:"
    Get-Content optimized_output.txt
    break
  }
}