Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

リアクティブ用のテストの強化 #915

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

rsk0315
Copy link
Contributor

@rsk0315 rsk0315 commented Sep 18, 2022

resolves #899

  • サブコマンドの実装
  • 単体テスト

追加内容

撃墜ケースを見つける前提であれば、見つけたケースを後から利用できる形式のテストがあるのが好ましいと思いました。
現状の t/r では、ジャッジコマンドが都度ケースを生成する前提になっており、これに適していなさそうです。

それを踏まえ、以下のオプション・サブコマンドを追加しました:

  • t/rf t/r -i:テストケースを読んで処理を行うジャッジ用のテスト
    • $ for f in test/* ; [[ -e a.pipe ]] && rm a.pipe ; mkfifo a.pipe && ./a.out < a.pipe | ./judge $f > a.pipe ; done に相当
    • $f には、提出プログラムに見せないジャッジ用のデータが入るのを想定(ジャッジが任意に利用)
      • テストケースの生成にはリアクティブは不要なので、g/i などで生成可能
      • adaptive のジャッジであっても、入力サイズやシードなどを固定するために使えるはず
  • g/r:リアクティブ用の生成コマンド
    • ジェネレータを使わない場合は、ケース生成も行うジャッジ(t/r で使うのと同じ)を仮定
      • ジャッジプログラム側で再現用の情報を表示する?
    • ジェネレータを使う場合は、テストケースを読むジャッジを仮定
      • 撃墜ケースの保存も行う

% # ジェネレータなしで hack
% oj g/r -d test/e target/release/e-wa target/release/e-judge-self-gen
% # ジェネレータを用いて hack + ケースの保存
% oj g/r -d test/e -g target/release/e-gen target/release/e-wa target/release/e-judge
% # 生成したファイルを用いてテスト
% oj t/r -i -c target/release/e target/release/e-judge test/e/*

懸念

  • t/rf のエイリアスは微妙な感じがする
    • t/r のオプションに -i, --from-file のようなのを足した方がよかったか
    • -i を使うとデフォルトでは test/ のファイルを使用、-d DIR でディレクトリを指定など、他と合わせる感じで
    • t/r -i に変更
  • g/rg/i と違って hack が前提なので、h/r hack-reactive などにした方がよい?
    • 対象の実行ファイルのデフォルトを ./a.out にして oj h/r -c ./hacked -g ./generator ./judge とかにしてしまう?

@rsk0315 rsk0315 changed the title Feature/reactive tests リアクティブ用のテストの強化 Sep 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

oj test-reactive で複数のテストケースを実行したい
1 participant