Скрипты автоматического тестирования
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;
}
}