Windows
Примеры скриптов. Уберите пробелы внутри "% %"! Скрипты записывать в файл с расширением *.cmd.
Файлы с тестами называются 01, 02, 03, .... Файлы с правильными ответами называются 01.a, 02.a, 03.a.
Запускаемая программа: ..\a.exe. Имена входных-выходных файлов sum.in-sum.out.
Запустить программу на всех тестах, вывести на экран результат работы программы и правильный ответ
echo off for % %f in (??) do echo TEST % %f & echo TEST % %f & copy % %f sum.in > nul & ..\a.exe & echo Output: & type sum.out & echo Correct: & type % %f.a
Запустить программу на всех тестах, сравнить ответ с правильным при помощи команды fc, остановиться на первом тесте с неправильным ответом
echo off for % %f in (??) do echo TEST % %f & copy % %f sum.in > nul & ..\a.exe & fc /w % %f.a sum.out & if errorlevel 1 exit
Запустить программу на всех тестах, сравнить ответ с правильным при помощи check.exe, остановиться на первом тесте с неправильным ответом
echo off for % %f in (??) do echo TEST % %f & copy % %f sum.in > nul & ..\a.exe & check.exe sum.in sum.out % %f.a & if errorlevel 2 exit
Пример чекера
Чекер запускается из командной строки с тремя параметрами. Первый параметр – имя файла с входными данными, второй – имя файла с выводом программы, третий – имя файла с правильным ответом. Чекер возвращает 0, если ответ правильный, 2 – если ответ неправильный.
#include <iostream> #include <fstream> using namespace std; int main(int narg, char ** argv) { if (narg != 4) { cerr << "You must specify 3 args" << endl; return 1; } ifstream input(argv[1]); ifstream output(argv[2]); ifstream correct(argv[3]); int user_ans, correct_ans; output >> user_ans; correct >> correct_ans; if (user_ans == correct_ans) { cout << "OK" << endl; return 0; } else { cout << "WA" << endl; return 2; } }