Competitive Programming Stress Test Tools

Overview

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 の出力先 (テストケースの保存先)

Issues
Releases(v1.1.0)
Owner
Ryusei Ishikawa
Security / Algorithm
Ryusei Ishikawa
Testing Framework for Rust

Polish Polish is Test-Driven Development done right Getting Started Installing the Package The crates.io package is kept up-to-date with all the major

Fadi Hanna Al-Kass 41 Jan 9, 2021
Travis CI and AppVeyor template to test your Rust crate on 5 architectures and publish binary releases of it for Linux, macOS and Windows

trust Travis CI and AppVeyor template to test your Rust crate on 5 architectures and publish binary releases of it for Linux, macOS and Windows Featur

Jorge Aparicio 1.1k Jun 12, 2021
HTTP mocking library for Rust.

httpmock HTTP mocking library for Rust. Documentation · Crate · Report Bug · Request Feature · Changelog Features Simple, expressive, fluent API. Many

Alexander Liesenfeld 85 Jun 11, 2021
🐇 Fuzzing Rust code with American Fuzzy Lop

afl.rs Fuzzing Rust code with AFLplusplus What is it? Fuzz testing is a software testing technique used to find security and stability issues by provi

Rust Fuzzing Authority 1k Jun 15, 2021
Playwright is a rust library to automate Chromium, Firefox and WebKit built on top of Node.js library.

?? Playwright for Rust Playwright is a rust library to automate Chromium, Firefox and WebKit built on top of Node.js library. Installation [dependenci

octaltree 16 Jun 13, 2021
Test social media cards locally

Share Preview Test social media cards locally Description Preview and debug websites metadata tags for social media share. Third Party Packages Distri

Rafael Mardojai CM 21 Jun 6, 2021