Стресс-тестирование

Стресс-тестирование

Суть такая: * Есть решение smart — быстрое, но в котором есть баг, который хотим найти * Пишем решение stupid — медленное, но точно корректное * Пишем генератор gen — печатает какой-то корректный тест, сгенерированный случайно * Кормим всё в скрипт checker, который n раз генерирует тест, даёт его на ввод stupid-у и smart-у, сравнивает выводы и останавливается, когда они отличаются

Примерный код скрипта:

import os, sys

f1, f2, gen, iters = sys.argv

for i in range(int(iters)):
    print('Test', i+1)
    os.popen('python3 %s > test.txt' % gen)
    v1 = os.popen('./%s < test.txt' % f1).read()
    v2 = os.popen('./%s < test.txt' % f2).read()
    if v1 != v2:
        print test
        print("Correct:")
        print v1
        print("Wrong:")
        print v2
        break

Автор обычно запускает его командой python3 checker.py stupid smart gen.py 100, предварительно скомпилировав stupid и smart в ту же директорию, что и сам checker.py.

Скрипт написан под Linux. Для Windows нужно убрать «./» во всех системных вызовах.

gen.py автор тоже обычно пишет на питоне, но вообще его тоже можно писать на чём угодно, сделать исполняемым и вызывать через ./gen. Пример gen-а, генерирующего случайную строку из символов “a”, “b” и “c” длины от 1 до 10:

from random import randint, choice

n = randint(1, 10)

print(n)

for _ in range(n):
    print(choice('abc'), end='')