(ぼくはこう使っているという話ですが)
コンテストごとにディレクトリを用意する。
contest-5/
+- python.py <- 自分が書いたコード
+- c.c <- 自分が書いたコード
+- node.js <- 自分が書いたコード
| ...
|
+- test
+- testbox
`- tests/
+- 1.in <- テストケースの入力
+- 1.out <- テストケースの出力
+- 1.out.2 <- テストケースの出力 (2通り以上許容されるとき)
+- 2.in
+- 2.out
`- 2.out.2
chmod +x test testbox
を忘れずに。
テストケースに通るか調べてくれる
- 使い方:
./test
の後ろに実行するコマンドを続ける
テストに通る場合
$ ./test python3 python.py
TEST 1: OK
TEST 2: OK
通らない場合 (diffが出る)
$ gcc c.c
(ワーニングの嵐)
$ ./test ./a.out
--- tests/1.out 2020-05-04 13:35:41.000000000 +0900
+++ /var/folders/99/bh16wqjd1yz06ngbdjc8rrjm0000gn/T/tmp.gudDipmm 2020-05-07 00:45:48.000000000 +0900
@@ -1 +1 @@
-41568294818252795378451692656417
\ No newline at end of file
+4
\ No newline at end of file
--- tests/1.out.2 2020-05-04 15:51:54.000000000 +0900
+++ /var/folders/99/bh16wqjd1yz06ngbdjc8rrjm0000gn/T/tmp.gudDipmm 2020-05-07 00:45:48.000000000 +0900
@@ -1 +1 @@
-41965987818254755378481626686493
\ No newline at end of file
+4
\ No newline at end of file
TEST 1: FAILED
...
- 問題ごとに出力中の空白の扱いが違う件(空白は全部無視,前後の空白は無視,空白は無視しない,など)
- 問題に合わせて適宜testスクリプト内の
normalize
の定義を切り替える
- 問題に合わせて適宜testスクリプト内の
- 2,3通りの出力ケースとのdiffでは済まない(正しい出力結果がN通りありえる)場合
- カスタムのバリデータを書いて実行可能ファイルとして
./validate
に置くとそれを使ってくれる。 ./validate 出力結果ファイル名 入力ファイル名
で呼び出す- バリデータは,OKならば終了コード0で,FAILEDならば0以外で終了するべし
- この場合エラーでもdiffなどは出ないのでバリデータ側で適切に差分などを吐くようにする
- カスタムのバリデータを書いて実行可能ファイルとして
esolang-boxで実行した結果がテストケースに通るか調べてくれる (要するに./test docker run ...
をしてくれる)
- 必要なもの: Docker
- 使い方:
./testbox language program
- language は,esolang-boxから
esolang/ほげ
を探して ほげ を入れる
- language は,esolang-boxから
$ ./testbox tex tex.tex
TEST 1: OK
TEST 2: OK