/CPSTT

Competitive Programming Stress Test Tools

Primary LanguageRustMIT LicenseMIT

MIT License Rust xryuseix xryuseix

Competitive Programming Stress Test Tools

競技プログラミング用 ストレステストツール

このプログラムの役割

  1. Wrong Answer のプログラムに対して,それより実行時間がかかるが確実に Accepted できる愚直プログラムと比較することで, Wrong Answer となるテストケースを探し出す
  2. 最大コーナーケースに対して,実行時間以内に Accepted ができるかテストをする

デモンストレーション

インストール

git clone https://github.com/xryuseix/CPSTT
cd CPSTT
cargo install --path .
cd test # または以下に記す設定を行う(推奨)
cpstt # 実行

必要なディレクトリ構成

test ディレクトリを参考に,以下のファイル/ディレクトリを作成してください.なお,cpstt_out/内のディレクトリとtestcase/は自動で生成されます.

/path/to/YourCodingDirectory
|--cpstt_out/
| |--bin/
| |--smart/
| |--stupid/
|--generator.cpp
|--settings.toml
|--smart.cpp
|--stupid.cpp
|--testcase/

各入力ファイルの説明

generator.cpp

  • テストケースを作成するプログラム
  • ofsに出力した内容がそのままテストケースとなる.init関数を除いて,icpc-jag/rimeと同じように記述可能
  • 以下のように記述すれば良い
#include <fstream>
#include <iostream>
using namespace std;

string root_path = "";

void init(int argc, char *argv[]) {
    srand((unsigned)(time(NULL)));
    for (int i = 1; i < argc; i++) {
        root_path += std::string(argv[i]);
    }
}

// aとbをファイルストリームに出力する
// ファイル名は prefix_num.in (ex: 00_sample_00.in)
void output(int a, int b, const string &prefix, const int num) {
    char name[100];
    sprintf(name, "%s/testcase/%s_%02d.in", root_path.c_str(), prefix.c_str(),
            num);
    ofstream ofs(name);
    /* ここから書き換える */
    ofs << a << " " << b << endl;
    /* ここまで */
    ofs.close();
}

int main(int argc, char *argv[]) {
    init(argc, argv);
    /* ここから書き換える */
    output(0, 0, "0_sample", 0);
    output(0, 1, "0_sample", 1);
    output(1, 0, "0_sample", 2);
    output(1, 1, "0_sample", 3);
    /* ここまで */
}

参考プログラム

smart.cpp

  • 競技プログラミングの問題を解くプログラムのここに記述する
  • stupid.cpp と入れ替えても良いが,名前の通り効率の良いプログラムを記載することを推奨する

参考プログラム

stupid.cpp

  • 競技プログラミングの問題を解くプログラムのここに記述する
  • smart.cpp と入れ替えても良いが,名前の通り効率の悪いプログラムを記載することを推奨する

参考プログラム

settings.toml

  • 本プログラムの設定ファイル
  • 使い方はコメントの通り
[execution]
# ユーザプログラム実行結果の最大表示文字数
max_output_len = 200
# ユーザプログラム実行結果の最大表示行数
max_output_line = 4
# ユーザプログラムのTime Limit(ms)
time_limit = 2200
# 実行形式ファイルの拡張子
bin_extension = "out"

[logging]
# ユーザプログラム実行結果の表示有無
dump_exe_result = false

参考ファイル

各入力ディレクトリの説明

cpstt_out/

smart.cppstupid.cpp が出力した実行結果と,生成したバイナリファイルを保存する

cpstt_out/smart/

smart.cpp が出力した実行結果を保存する

cpstt_out/stupid/

stupid.cpp が出力した実行結果を保存する

cpstt_out/bin/

stupid.cpp, smart.cpp, generator.cpp をコンパイルしたバイナリファイル保存する

testcase/

generator.cpp の出力先 (テストケースの保存先)