Программы-интеракторы

From EjudgeWiki

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

Программа-интерактор является необходимой для поддержки интерактивных задач. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора.

Настройки в конфигурационных файлах

Для интерактивных задач должна быть установлена конфигурационная переменная interactor_cmd раздела описания задачи. Пример раздела описания задачи дан ниже.

[problem]
super = "Generic"
short_name = "C"
long_name = "Sum 3"
standard_checker = "cmp_int_seq"
interactor_cmd = "interactor_C"

Конфигурационная переменная interactor_cmd наследуется из абстрактных задач, и для нее выполняются форматные подстановки, поэтому, интерактор может быть определен и следующим образом:

interactor_cmd = "interactor_%Ps"

По умолчанию программы-интеракторы должны размещаться в том же каталоге, где и проверяющие программы, то есть в каталоге checkers корневого каталога турнира.

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

interactor_env = "VAR1=val1"
interactor_env = "VAR2=val2"

Запуск программы-интерактора

Программа интерактор запускается параллельно с тестируемой программой. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора с помощью неименованных каналов (pipe). Стандартный поток ошибок сохраняется в файл и в последующем добавляется в протокол проверки. Программе-интерактору передаются три аргумента командной строки:

  • путь к файлу с входными тестовыми данными (должен открываться только на чтение);
  • путь к файлу, в который программа-интерактор выводит протокол взаимодействия для последующей проверки проверяющей программой (должен открываться на запись);
  • путь к файлу с правильным ответом.
  • идентификатор процесса (PID) тестируемой программы (с версии 3.0).
  • путь к .inf-файлу для теста, если установлен флаг use_info (с версии 3.6.1).

Переменная окружения EJUDGE устанавливается в 1 (с версии 2.3.28).

Переменная окружения EJUDGE_LOCALE устанавливается в значение конфигурационной переменной checker_locale, ели она установлена (с версии 2.3.28).

Переменная окружения EJUDGE_SUID_RUN устанавливается в 1, если у тестируемой задачи установлен флаг enable_suid_run (с версии 3.6.1).

Переменная окружения EJUDGE_TESTLIB_MODE устанавливается в 1, если у тестируемой задачи установлен флаг enable_testlib_mode (с версии 3.6.1).

Результат работы программы-интеракторы

Программа-интерактор должна завершать работу как только получает признак конца файла на стандартном потоке ввода. Если признак конца ввода не обрабатывается, возможна ситуация тупика. Программа интерактор должна возвращать коды завершения 0, 4 или 5, как и проверяющая программа.

  • код завершения 0 означает, что интерактор не обнаружил нарушений протокола взаимодействия или явного ошибочного вывода тестируемой программы. Протокол взаимодействия, сохраненный интерактором в файле, путь к которому передан в аргументах командной строки, будет проверен проверяющей программой.
  • код завершения 4 приводит к диагностике presentation error.
  • код завершения 5 приводит к диагностике wrong answer.