Проверяющие программы

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Проверяющие программы

Проверяющие программы предназначены для проверки правильности ответа, выданного тестируемой программой. Проверяющие программы запускаются только если тестируемая программа уложилась в ограничения времени работы на тесте, уложилась в ограничения максимального размера памяти и завершилась корректно (см. ошибка при работе программы).

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

Формы взаимодействия проверяющей программы и тестирующей системы зависят от тестирующей системы. В системе ejudge проверяющая программа получает необходимые параметры в командной строке и возвращает вердикт с помощью кода завершения. Вывод на стандартный поток вывода и стандартный поток ошибок проверяющей программы сохраняется в протоколе тестирования и доступен для последующего просмотра.

Система ejudge предоставляет богатый набор стандартных проверяющих программ. В случае, когда требования на результат работы тестируемой программы не покрываются стандартными проверяющими программами необходимо написание специальной проверяющей программы для задачи.

Проверяющие программы могут быть написаны на любом языке программирования, программы на котором могут запускаться из командной строки. Это не обязательно C, C++, Pascal или Delphi, но и, например, Perl и т. п. Для облегчения разработки проверяющих программ и повышения их переносимости между разными тестирующими системами разработано несколько библиотек.

Самая распространённая среди таких библиотек - testlib. Эта библиотека разработана для языков программирования Pascal и Delphi. К сожалению, в настоящее время распространены несколько не совсем совместимых друг с другом версий библиотеки.

Для языка C++ существует адаптация библиотеки testlib, написанная М. Мирзаяновым.

В составе системы ejudge поставляется библиотека libchecker, предназначенная для написания проверяющих программ на языках C и C++. Эта библиотека поддерживает все расширенные возможности, предоставляемые системой ejudge при проверке программ.

При настройке турниров в системе ejudge с помощью CGI-интерфейса serve-control необходимая библиотека выбирается автоматически в зависимости от суффикса файла с исходным кодом проверяющей программы (см. автоматический выобор библиотеки для проверяющей программы).

Переменные окружения

Переменные окружения для проверяющей программы можно устанавливать с помощью конфигурационной переменной checker_env секции описания задачи.

Дополнительно устанавливаются следующие переменные окружения:

EJUDGE1Всегда устанавливается в 1 (начиная с версии 2.3.26)
EJUDGE_SCORING_CHECKER1Только если scoring_checker установлен в 1 (начиная с версии 2.3.26)
EJUDGE_LOCALE Значение checker_locale (начиная с версии 2.3.28)

Оценивающая проверяющая программа

Оценивающая проверяющая программа помимо вердикта правильности ответа выводит на стандартный поток вывода балл, выставленный за данный тест. Описание функционирования оценивающей проверяющей программы дано в описании переменной scoring_checker.