Libchecker:Структура проверяющей программы

From EjudgeWiki
Revision as of 15:46, 1 December 2006 by Cher (talk | contribs)

Библиотека представляет собой каркас (framework), в который вставляются необходимые действия по проверке результата. Библиотека определяет функцию main, то есть при старте проверяющей программы управление получает модуль инициализации библиотеки libchecker.

Вместо функции main проверяющая программа должна определить функцию checker_main с прототипом, таким же как у main. После инициализации библиотеки libchecker будет вызвана функция checker_main основной части кода проверяющей программы. Таким образом, функция checker_main проверяющей программы играет роль функции main обычной программы на C или C++.

Если проверяющая программа сама определяет функцию main и не использует функций и переменных, предоставляемых библиотекой libchecker, такая программа может безопасно линковаться с библиотекой, и библиотека никаким образом не повлияет на работу программы. То есть даже автономные проверяющие программы могут безопасно линковаться с библиотекой libchecker.

Простейший случай проверяющей программы

В самом простом случае проверяющая программа требует входной файл и результат работы тестируемой программы на входном файле. Проверяющая программа сама вычисляет правильный ответ и сравнивает его с ответом, выданным тестируемой программой. Проверяющая программа тогда может выглядеть примерно следующим образом:

#define NEED_CORR 0
#include "checker.h"
int checker_main(int argc, char **argv)
{
   // checker code is here
   checker_OK();
}

Здесь макроопределение NEED_CORR равное 0 включает простейший режим проверки. Макроопределение NEED_CORR должно обязательно присутствовать в проверяющей программе и находиться перед директивой #include.

Функция checker_main должна либо возвращать значение, соответствующее допустимому коду завершения проверяющей программы, либо завершаться вызовом одной из функций checker_OK, fatal_WA, fatal_PE, fatal_CF, fatal_read. В данном примере функция checker_main завершается вызовом checker_OK. Предполагается, что код проверяющей программы будет при необходимости вызывать другие функции, завершающие работу проверяющей программы.

Использование файлов эталонного ответа

Использование файлов дополнительной информации о тесте

Использование подготовленного рабочего каталоге

Сочетание режимов использования