チェック用シェルスクリプトを書いてみた
与えられたテストケース群についての、2つのプログラムの出力が同じかどうかをチェックするシェルスクリプトを書きました。 パラメータの値が小さいところで愚直解と一致するかどうか調べたいときなどに有用です。 出力が違った場合、そのときの入力と、2つのプログラムの出力を見ることが出来ます。 MacやLinuxなど、Bashが動く環境で是非お試しください。
#!/bin/bash PROGRAM1="$1" PROGRAM2="$2" text="" while read i; do if [ "$i" = "" ]; then echo -e "$text" out1=$(echo -e "$text" | $PROGRAM1) echo "out1: $out1" out2=$(echo -e "$text" | $PROGRAM2) echo "out2: $out2" if [ "$out1" != "$out2" ]; then echo "different!" exit fi text="" fi text="${text}${i}\n" done echo "finish."
使い方
次のとおりです(シェルスクリプトの名前をcheck.shとしてます)。
./check.sh [プログラム1の実行ファイルパス] [プログラム2の実行ファイルパス]
入力は標準入力から受け取ります。 以下、使用例です。
cat input.txt | ./check.sh ./program1 ./program2 python input.py | ./check.sh ./program1 ./program2
一行目はテキストファイルから入力する場合です。 入力ケースは複数含めることが出来ます。その場合、入力ケース同士を空行で区切ってください。 二行目の例はプログラムから入力する場合です。パイプを使ってプログラムの出力をチェックスクリプトに渡します。 この場合も、入力ケース同士は空行で区切ってください。
出力例
こんな感じで出ます。
... 3 2 0 0 0 out1: 6 out2: 6 3 2 1 0 0 out1: 7 out2: 7 3 2 2 0 0 out1: 4 out2: 5 different!