.inf-файлы

From EjudgeWiki
Revision as of 12:03, 24 December 2022 by Cher (talk | contribs) (...)

Навигация: Главная страница/Система ejudge/Использование/Конфигурационные файлы/.inf-файлы

Файлы с дополнительной информацией о тестах располагаются в том же каталоге, в котором располагаются файлы с тестовыми данными и файлы с эталонными ответами. По умолчанию файлы с дополнительной информацией имеют суффикс имени .inf.

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

Включение режима подстановки

Первой строкой в файле может находиться параметр

enable_subst

В этом случае будет включен режим подстановки. В дальнейшем тексте все вхождения переменных вида ${VARNAME} будут заменяться на их значения.

FIXME: описать переменные

Аргументы командной строки

Аргументы командной строки задаются с помощью параметра params. Например,

params = 1 2   3

В запускаемую программу будут переданы три аргумента командной строки: "1", "2", "3". Аргументы командной строки разделяются пробельными символами. Допускается не передавать в программу аргументы командной строки.

params =

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

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

params = "1 2" "\"var\""

В этому случае в программу передаются два параметра командной строки: первый параметр содержит пробел, а второй - кавычки.

Параметр program_name позволяет задать имя запускаемой программы, которое будет передаваться в тестируемую программу в качестве параметра argv[0]. Поддерживается с версии 3.8.0.

program_name = "prog"

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

Переменные окружения задаются с помощью параметра environ. Например,

environ = VAR1=value1 VAR2=value2

при запуске программы будут установлены две переменных окружения VAR1 и VAR2 со значениями value1 и value2 соответственно.

Параметр init_env позволяет задать переменные окружения для программы инициализации, задаваемой параметром init_cmd. Значения переменных задаются как описано выше.

Параметр interactor_env позволяет задать переменные окружения для интерактора, задаваемой параметром interactor_cmd. Значения переменных задаются как описано выше.

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

Управление выводом тестируемой программы

Параметр disable_stderr запрещает тестируемой программе вывод на стандартный поток ошибок. Если тестируемая программа в процессе выполнения вывела что-либо на stderr, она получит вердикт выполнения Presentation error. Данный параметр аналогичен конфигурационной переменной раздела описания задач disable_stderr, но позволяет задавать этот режим для отдельных тестов, а не для задачи целиком.

Чтобы включить режим запрета вывода на стандартный поток ошибок значение параметра либо не указывается, либо указывается большим нуля, например:

disable_stderr

Чтобы отключить режим запрета вывода на стандартный поток ошибок, если они был включен для всей задачи в целом, необходимо указать значение параметра 0.

disable_stderr = 0

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

check_stderr

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

Задание ожидаемого кода завершения

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

exit_code = 1

В случае, если тестируемая программа на данном тесте завершится с кодом, отличным от 1, она получит вердикт Wrong answer на данном тесте.

Параметр ignore_exit_code отключает на данном тесте режим проверки кода завершения процесса.

ignore_exit_code

Если для задачи в целом активирован режим ignore_exit_code, его можно деактивировать для одно теста указав

ignore_exit_code = 0

Данный параметр работает только для кода завершения системного вызова _exit и аналогичных. Если тестируемая программа завершилась из-за сигнала, по-прежнему диагностируется Run-Time Error.

Комментарии к тесту

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

team_comment = "тест на крайнее значение x"

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

comment = "тест на случай x == 0"

Управление компиляцией

Если в конфигурационном разделе задачи заданы переменные enable_multi_header, compiler_env_pat, то .inf-файл может использоваться для управления компиляцией.

Для задания опций компилятора в может использоваться параметр compiler_env, например

compiler_env = "EJUDGE_FLAGS=-DTEST10"

Здесь устанавливается переменная окружения EJUDGE_FLAGS. Она будет передана в скрипт компиляции, который подставит значение этой переменной окружения в командную строку компиляции.

Аналогично могут задаваться переменные окружения для программы проверки стиля:

style_checker_env = "DISABLE_X=1"

Если на некотором тесте компилятор должен выдать ошибку компиляции, например, когда проверяется, что сданный на проверку файл не позволяет выполнять те или иные операции, например, если сдается класс C++, то проверяется, что объект класса не может быть скопирован, то может использоваться параметр compiler_must_fail

compiler_must_fail
source_stub = "002_s"

В параметре source_stub указывается шаблон имени файла, который будет использован чтобы все-таки скомпилировать исполняемую программу для данного теста. К шаблону имени файла будет добавлен суффикс имени исходного файла и короткое имя языка программирования (если установлена опция use_lang_multi_header). Например, в случае сдачи программы для компилятора g++ полное имя подставляемого исходного файла будет либо 002_s.cpp, либо 002_s.g++.cpp. Подстановочный файл также должен находиться в каталоге с тестами к задаче.

Параметр allow_compile_error позволяет разрешить ошибки компиляции на данном тесте. В случае ошибки компиляции будет скомпилирован файл, заданный в source_stub. В случае успешной компиляции используется результат компиляции. Поддерживается с версии 3.9.0.

Отключение valgrind

Параметр disable_valgrind позволяет отключить запуск тестируемой программы под управлением valgrind для данного теста. Параметр имеет смысл при тестировании под управлением valgrind, например, для языков gcc-vg или g++-vg.

Ограничения тестируемой программы

Параметр max_open_file_count позволяет изменить максимальное число одновременно открытых файловых дескрипторов для этого теста. См. также ограничение max_open_file_count на уровне задачи. Поддерживается с версии 3.6.1.

max_open_file_count = 10

Параметр max_process_count позволяет изменить максимальное процессоров (нитей) для этого теста. См. также ограничение max_process_count на уровне задачи. Поддерживается с версии 3.6.1.

max_process_count = 2

Параметр max_vm_size позволяет изменить ограничение на размер виртуального адресного пространства процесса. См. также ограничение max_vm_size на уровне задачи. Поддерживается с версии 3.6.3.

max_vm_size = 256M

Параметр max_stack_size позволяет изменить ограничение на размер стека процесса. См. также ограничение max_stack_size на уровне задачи. Поддерживается с версии 3.6.3.

max_stack_size = 64M

Параметр max_rss_size позволяет изменить ограничение на размер использованной оперативной памяти процесса. См. также ограничение max_rss_size на уровне задачи. Поддерживается с версии 3.9.0.

max_rss_size = 64M

Параметр max_file_size позволяет изменить ограничение на размер создаваемых процессом файлов. См. также ограничение max_file_size на уровне задачи. Поддерживается с версии 3.6.3.

max_file_size = 32M

Параметр time_limit_ms позволяет изменить ограничение времени выполнения тестируемой программы в миллисекундах. См. также ограничение time_limit или time_limit_millis на уровне задачи. Поддерживается с версии 3.8.0.

time_limit_ms = 1000

Параметр real_time_limit_ms позволяет изменить ограничение реального времени выполнения тестируемой программы. См. также ограничение real_time_limit на уровне задачи. Поддерживается с версии 3.8.0.

time_limit_ms = 3000

Пропуск теста в зависимости от языка программирования

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

ok_language = gcc-32