Rustで競プロがやりたい(8)

灰色を全て解き終わり茶色に進むとなると、UnionFindなどのデータ構造がそろそろ出てくる。 なので、そのあたりを整える為のlibrary checkerを使う。

judge.yosupo.jp

しかしlibrary checker、広く言えばAtCoder以外の競プロサイトはproconioが対応していない。 proconioをサイトからソースを引っ張ってきて貼り付けても、proconioに使われているlazy staticも対応していなかったりで、上手くいかない。 他のコンテストサイトはともかくlibrary checkerまで使えないと確認ができなくて不便である。 そこら辺うまく書いて対応しろという話ではあるが、今回はローカル環境でlibrary checkerのテストを行う方針を取る。

library checkerはソースコードgithubで公開されている。

github.com

READMEに書かれているが、PythonC++を予め使えるようにしておかないといけない模様。

環境構築が済んでいたので、まずはgitでclone。

git clone https://github.com/yosupo06/library-checker-problems.git

cloneしたフォルダに移動する。

cd path/library-checker-problems

初回は以下のコマンドも必要か

pip3 install -r requirements.txt

その後、実際にテストケースを作成する。

python ./generate.py -p (問題フォルダ名)

問題フォルダ名にはテストケースが欲しい問題のフォルダ名を入れる。 cloneしたフォルダにはdatastructureやmathなどグループ分けがされており、その中に問題のフォルダが格納されている。

ベルヌーイ数のテストケースが欲しい場合、以下の通りになる。

python ./generate.py -p bernoulli_number

こうすると、bernoulli_numberのフォルダの中にinとoutのフォルダが作られ、その中にテストケースが格納されている。

ところで、テストケースを作れない場合があった。 Rustのwarningのようなものが発生してて、実行はできるけど終了するみたいな感じで。 その場合、下のコマンドで実行できるようにしておく。

set CXXFLAGS=-Wno-error

さて、テストケースはできたが、いちいち手動でコピペしてテストケースを実行するのは面倒。 そこで、online judge toolsを使う。

github.com

pythonのライブラリになるのか、コマンドだけで導入可能。

pip3 install online-judge-tools 

参照しているパスにtestというフォルダを作り、テストケースを入れる。 inとoutフォルダで分けるのではなく、中身のファイルを直接入れる。

その後、テストコマンドを実行する。 Rustの場合は、先にbuildを済ませて、できたexeファイルをコマンドで指定する。

oj t -c "(exeファイルのパスを指定)"

テスト結果が表示される。

今は少し面倒だが、この作業でごまかしている。