🐙
AtCoderで使うランダムテストケース用のスタンドアロンなスクリプト書いた
ランダムな値のテストケースを作りたい!
AtCoderで「うわああ、Wrong Answerになったあああ」というときに、テストケースを書くのがとても大変だったりすることがあると思います。
そういうときに便利なランダムテストケースを生成するやつを作りました。
ただのスクリプトなので、python3の書き方で書きます。
下の例で言うと、
-
in_5.txt
からin_60.txt
までのファイルを作り、 -
./to_test.py
に渡して、 (to_test.py
は、計算量があまりよくないコードなどを使う想定です) -
out_5.txt
からout_60.txt
までを生成します。 - あとはよしなにテストすると良さげです
random_test.py
#!/usr/bin/env python3
import sys
import os
import random
##############################################################################
# config
IN_TXT_START = 5
IN_TXT_END = 60
EXECUTION_COMMAND = './to_test.py'
input_template = '''
{X} {A} {D} {N}
'''
def create_context():
ctx = dict()
ctx['X'] = random.randint(-10 ** 3, 10 ** 3)
ctx['A'] = random.randint(-10 ** 3, 10 ** 3)
ctx['D'] = random.randint(-10 ** 3, 10 ** 3)
ctx['N'] = random.randint(-10 ** 3, 10 ** 3)
return ctx
##############################################################################
def generate_test():
for i in range(IN_TXT_START, IN_TXT_END + 1):
ctx = create_context()
input_string = input_template.format(**ctx).strip() + '\n'
in_file = f'in_{i}.txt'
out_file = f'out_{i}.txt'
print('.', end='', flush=True)
with open(in_file, 'w') as f:
f.write(input_string)
os.system(f'cat {in_file} | {EXECUTION_COMMAND} > {out_file}')
print()
# usage:
# $ python3 random_test.py
generate_test()
1つのファイルにしているのは、急遽カスタマイズしたいこととかあるんじゃないかというのを考えた結果によるものです。
↓こんな感じで出力されてうれしいです
$ python3 random_test.py
........................................................
$ cat in_60.txt
164 -719 74 -683
$ cat out_60.txt
883
Discussion