Difference between revisions of "Проверяющие программы"

From EjudgeWiki
(Переменные окружения)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Проверяющие программы]]
 +
 
Проверяющие программы предназначены для проверки правильности ответа, выданного тестируемой программой.
 
Проверяющие программы предназначены для проверки правильности ответа, выданного тестируемой программой.
Проверяющие программы запускаются только если тестируемая программа уложилась в ограничения времени работы на тесте (см. [[ошибка превышения лимита времени]]), уложилась в ограничения максимального размера памяти (см. [[ошибка превышения ограничения по памяти]]) и завершилась корректно (см. [[ошибка при работе программы]]).
+
Проверяющие программы запускаются только если тестируемая программа уложилась в [[ошибка превышения лимита времени|ограничения времени работы на тесте]], уложилась в [[ошибка превышения лимита памяти|ограничения максимального размера памяти]] и завершилась корректно (см. [[ошибка при работе программы]]).
  
Проверяющая программа должна диагностировать ошибку неправильного формата результата (см. [[ошибка неправильного формата результата]]) или неправильный ответ (см. [[неправильный ответ]]). В случае, если результат работы тестируемой программы выдан в правильном формате и верен, проверяющая программа уведомляет об этом тестирующую систему.
+
Проверяющая программа должна диагностировать [[ошибка неправильного формата результата|ошибку неправильного формата результата]] или [[неправильный ответ]]. В случае, если результат работы тестируемой программы выдан в правильном формате и верен, проверяющая программа уведомляет об этом тестирующую систему.
  
Формы взаимодействия проверяющей программы и тестирующей системы зависят от тестирующей системы. В системе ejudge проверяющая программа получает необходимые параметры в командной строке (см. [[параметры командной строки проверяющей программы]]) и возвращает вердикт с помощью кода завершения (см. [[коды завершения проверяющей программы]]). Вывод на стандартный поток вывода и стандартный поток ошибок проверяющей программы сохраняется в протоколе тестирования и доступен для последующего просмотра.
+
Формы взаимодействия проверяющей программы и тестирующей системы зависят от тестирующей системы. В системе ejudge проверяющая программа получает необходимые параметры в [[параметры командной строки проверяющей программы|командной строке]] и возвращает вердикт с помощью [[коды завершения проверяющей программы|кода завершения]]. Вывод на стандартный поток вывода и стандартный поток ошибок проверяющей программы сохраняется в протоколе тестирования и доступен для последующего просмотра.
  
Система ejudge предоставляет богатый набор стандартных проверяющих программ (см. [[стандартные проверяющие программы]]). В случае, когда требования на результат работы тестируемой программы не покрываются стандартными проверяющими программами необходимо написание специальной проверяющей программы для задачи.
+
Система ejudge предоставляет богатый набор [[стандартные проверяющие программы|стандартных проверяющих программ]]. В случае, когда требования на результат работы тестируемой программы не покрываются стандартными проверяющими программами необходимо написание специальной проверяющей программы для задачи.
  
 
Проверяющие программы могут быть написаны на любом языке программирования, программы на котором могут запускаться из командной строки. Это не обязательно C, C++, Pascal или Delphi, но и, например, Perl и т. п. Для облегчения разработки проверяющих программ и повышения их переносимости между разными тестирующими системами разработано несколько библиотек.
 
Проверяющие программы могут быть написаны на любом языке программирования, программы на котором могут запускаться из командной строки. Это не обязательно C, C++, Pascal или Delphi, но и, например, Perl и т. п. Для облегчения разработки проверяющих программ и повышения их переносимости между разными тестирующими системами разработано несколько библиотек.
Line 12: Line 14:
 
Самая распространённая среди таких библиотек - [[testlib]]. Эта библиотека разработана для языков программирования Pascal и Delphi. К сожалению, в настоящее время распространены несколько не совсем совместимых друг с другом версий библиотеки.
 
Самая распространённая среди таких библиотек - [[testlib]]. Эта библиотека разработана для языков программирования Pascal и Delphi. К сожалению, в настоящее время распространены несколько не совсем совместимых друг с другом версий библиотеки.
  
Для языка C++ существует адаптация библиотеки testlib, написанная М. Мирзаяновым.
+
Для языка C++ существует адаптация библиотеки [http://code.google.com/p/testlib/ testlib], написанная М. Мирзаяновым.
  
 
В составе системы ejudge поставляется библиотека [[libchecker]], предназначенная для написания проверяющих программ на языках C и C++. Эта библиотека поддерживает все расширенные возможности, предоставляемые системой ejudge при проверке программ.
 
В составе системы ejudge поставляется библиотека [[libchecker]], предназначенная для написания проверяющих программ на языках C и C++. Эта библиотека поддерживает все расширенные возможности, предоставляемые системой ejudge при проверке программ.
  
 
При настройке турниров в системе ejudge с помощью CGI-интерфейса [[serve-control]] необходимая библиотека выбирается автоматически в зависимости от суффикса файла с исходным кодом проверяющей программы (см. [[автоматический выобор библиотеки для проверяющей программы]]).
 
При настройке турниров в системе ejudge с помощью CGI-интерфейса [[serve-control]] необходимая библиотека выбирается автоматически в зависимости от суффикса файла с исходным кодом проверяющей программы (см. [[автоматический выобор библиотеки для проверяющей программы]]).
 +
 +
=== Переменные окружения ===
 +
 +
Переменные окружения для проверяющей программы можно устанавливать с помощью конфигурационной переменной <tt>[[Serve.cfg:problem:checker_env|checker_env]]</tt> секции описания задачи.
 +
 +
Дополнительно устанавливаются следующие переменные окружения:
 +
 +
<table border="1">
 +
<tr><td><tt>EJUDGE</tt></td><td>1</td><td>Всегда устанавливается в 1 (начиная с версии [[Изменения в версии 2.3.26|2.3.26]])</td></tr>
 +
<tr><td><tt>EJUDGE_SCORING_CHECKER</tt></td><td>1</td><td>Только если <tt>[[Serve.cfg:problem:scoring_checker|scoring_checker]]</tt> установлен в 1 (начиная с версии [[Изменения в версии 2.3.26|2.3.26]])</td></tr>
 +
<tr><td><tt>EJUDGE_LOCALE</tt></td><td>&nbsp;</td><td>Значение <tt>[[Serve.cfg:problem:checker_locale|checker_locale]]</tt> (начиная с версии [[Изменения в версии 2.3.28|2.3.28]])</td></tr>
 +
</table>
 +
 +
=== Оценивающая проверяющая программа ===
 +
 +
Оценивающая проверяющая программа помимо вердикта правильности ответа выводит на стандартный поток вывода балл, выставленный за данный тест. Описание функционирования оценивающей проверяющей программы дано в описании переменной <tt>[[Serve.cfg:problem:scoring_checker|scoring_checker]]</tt>.

Latest revision as of 16:11, 27 October 2013

Навигация: Главная страница/Система 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.