Rustで競プロがやりたい(8)
灰色を全て解き終わり茶色に進むとなると、UnionFindなどのデータ構造がそろそろ出てくる。 なので、そのあたりを整える為のlibrary checkerを使う。
しかしlibrary checker、広く言えばAtCoder以外の競プロサイトはproconioが対応していない。 proconioをサイトからソースを引っ張ってきて貼り付けても、proconioに使われているlazy staticも対応していなかったりで、上手くいかない。 他のコンテストサイトはともかくlibrary checkerまで使えないと確認ができなくて不便である。 そこら辺うまく書いて対応しろという話ではあるが、今回はローカル環境でlibrary checkerのテストを行う方針を取る。
library checkerはソースコードがgithubで公開されている。
READMEに書かれているが、PythonとC++を予め使えるようにしておかないといけない模様。
環境構築が済んでいたので、まずは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を使う。
pythonのライブラリになるのか、コマンドだけで導入可能。
pip3 install online-judge-tools
参照しているパスにtestというフォルダを作り、テストケースを入れる。 inとoutフォルダで分けるのではなく、中身のファイルを直接入れる。
その後、テストコマンドを実行する。 Rustの場合は、先にbuildを済ませて、できたexeファイルをコマンドで指定する。
oj t -c "(exeファイルのパスを指定)"
テスト結果が表示される。
今は少し面倒だが、この作業でごまかしている。