jalizadeh / testcase-generator

競技プログラミングのコンテスト中に使うテストケース生成・撃墜ケース発見のためのツール

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

testcase-generator

verification status

競技プログラミングの問題のテストケースを生成したり、生成したケースでテストを行って不正解となるケースや実行時エラーが発生するケースを探索したりするためのツールです。

demo.mp4
  • 整数・浮動小数点数
  • 文字列
  • 整数・浮動小数点数の配列
  • 文字列の配列
  • 整数・浮動小数点数の行列
  • グラフ (以下の設定が可能)
    • 頂点数
    • 辺数
    • 辺に重み有り / 辺に重み無し
    • 多重辺無し / 多重辺無しとは限らない
    • 自己ループ無し / 自己ループ無しとは限らない
    • 閉路無し / 閉路無しとは限らない
    • 連結 / 連結とは限らない
    • 有向 / 無向

を生成することができます。

主に競技プログラミングのコンテスト中にデバッグの目的で使用することを想定しているため汎用的であること・少ない労力で簡単にテストの生成ができること・小さいテストケースを高速かつ大量に生成,テストできることを重視しています。

一方で、作問をした人が問題のためにテストケースを用意するために用いる場合や大きいテストケースや特殊なテストケースを生成する場合などには適していない可能性があります。

使い方

使用には Python 3.9 (またはそれ以上)と、requirements.txt に記載されているライブラリのインストールが必要です。pip を使用する場合、以下のコマンドで必要なライブラリをインストールできます。

$ pip3 install -r requirements.txt

このツールは、生成するテストケースを指定するテキストファイルを作成してコマンドライン引数として与えて使用します。

例えば

int A [1, 100]
int B [1, 1000]
---
A B

というテキストファイルを in.txt という名前で作成して

$ ./main.py gen -i in.txt -c 100

などとすると、1 以上 100 以下の整数と 1 以上 1000 以下の整数が空白区切りで並んだテストケースが 100 個生成されます。

詳細な説明は以下の通りです。

インストール

個人的に使用するツールとして作ったため、特にパッケージマネージャへの登録などは行っていません(需要があれば考えます)。このリポジトリを好きな場所にクローンして、エイリアスなどを作成してお使いください。例えば Linux で bash をお使いなら、

$ git clone https://github.com/naskya/testcase-generator.git
$ cd testcase-generator
$ echo "alias testcase-generator=\"python3 `pwd -P`/main.py\"" >> ~/.bashrc

などとエイリアスを作成すると

$ testcase-generator gen -i in.txt -c 100

という風に testcase-generator コマンドを使えるようになります。

使用例

samples ディレクトリに AtCoder の問題のテストケースを生成するコードが入っています。ただし、数列の長さの範囲などは元の問題の制約よりも大幅に小さくなっています(N ≤ 10⁵ → N ≤ 100 など)。これはテストケースの種類によっては大きなものを生成するのに時間が掛かる場合があるから、また撃墜ケースが見つけられても大きいテストケースだとどこにバグが有るのか探すのが困難なことがよくあるからです。実際にコンテスト中に使用する際もこのように小さいテストケースを生成するために使うことをおすすめします。

バグ報告など

バグ報告は Issues へお願いします。疑問点があれば Discussions に Q&A のスレッドを立ててください。

About

競技プログラミングのコンテスト中に使うテストケース生成・撃墜ケース発見のためのツール

License:MIT License


Languages

Language:Python 100.0%