Difference between revisions of "Libchecker:Структура проверяющей программы"

From EjudgeWiki
 
Line 15: Line 15:
 
Проверяющая программа сама вычисляет правильный ответ и сравнивает его с ответом, выданным тестируемой программой.
 
Проверяющая программа сама вычисляет правильный ответ и сравнивает его с ответом, выданным тестируемой программой.
 
Проверяющая программа тогда может выглядеть примерно следующим образом:
 
Проверяющая программа тогда может выглядеть примерно следующим образом:
 +
 +
#define NEED_CORR 0
 +
#include "checker.h"
 +
 +
int checker_main(int argc, char **argv)
 +
{
 +
    // checker code
 +
    checker_OK();
 +
}
  
 
=== Использование файлов эталонного ответа ===
 
=== Использование файлов эталонного ответа ===

Revision as of 15:38, 1 December 2006

Библиотека представляет собой каркас (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
   checker_OK();
}

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

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

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

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