| h1. Установка интерактивных задач NEERC |
| |
| В этом году на NEERC начали cтавить интерактивные задачи с тестированием на Java. Эти задачи удалось поставить на DL; здесь задокументирован процесс установки. |
| |
| | Jan 2014. Автоматически обнаруживаются и установливаются задачи данного типа при загрузке DL Master'ом. |
| |
| h2. Содержание |
| |
| [Описание системы|#NEERC] |
| [Слой совместимости для DL|#DL] |
| [Процесс установки|#setup] |
| [#TODO] |
| |
| h2. {anchor:NEERC}Описание системы |
| |
| В папке с задачей есть следующие файлы: |
| - {{problem.xml}} (файл конфигурации) |
| - {{Interact.jar}} (программа-собеседник) + исходники |
| - {{coact.exe}} (программа-тестер) |
| - {{Check.jar}} (программа-чекер) + исходники |
| |
| В {{problem.xml}} (файл конфигурации) есть тег {{<interactor type="%simple">}}. В нём указан файл программы-собеседника ({{Interact.jar}}) и способ запуска ({{Java7}}). |
| |
| {{Interact.jar}} \- программа-собеседник (читает {{<taskname>.in}}, даёт вывод для решения, получает ввод для него же и выводит информацию о процессе тестирования в {{<taskname>.out}}). |
| |
| {{coact.exe}} запускается со следующими параметрами: |
| {code} |
| coact.exe <timelimit(seconds)> <memlimit(bytes)> <interactor> <solution> |
| {code} |
| Например: |
| {code} |
| coact.exe 2s 268435456 interact.exe sol.exe |
| {code} |
| При этом он умеет обрабатывать кавычки в параметрах: |
| {code} |
| coact.exe 2s 268435456 "java -jar Interact.jar" sol.exe |
| {code} |
| {{Check.jar}} \- реализация класса чекера для библиотеки {{testlib4j.jar}}. Он запускается следующей командой: |
| {code} |
| java -cp "<путь>testlib4j.jar;Check.jar" ru.ifmo.testlib.CheckerFramework Check <infile> <chkfile> <outfile> |
| {code} |
| Он читает {{<taskname>.out}}, генерирует комментарий и завершает работу; результат он возвращает кодом выполнения: |
| * 0: OK |
| * 1: Wrong Answer |
| * 2: Presentation Error |
| |
| h2. {anchor:DL}Слой совместимости для DL |
| |
| Задача ставится как интерактивная, с чекером, все файлы забираются с собой: |
| {code:title=task.cfg} |
| CHECKER = 1 |
| CHECKSUBJECT = FILE |
| CHECKFILES = {*.*} |
| TYPE = INTERACTIVE |
| {code} |
| Для запуска {{coact.exe}} был написан скрипт {{coact.bat}} с одним параметром (скомпилированный файл решения). В [{{StdSwp}}|http://dl.gsu.by/images/agulenko/stdswp.zip] был добавлен код, передающий управление этому скрипту при его наличии; также добавлен код, обнаруживающий файл {{solution.bat}} и передающий его первую непустую строку как команду запуска решения (файл генерируется при компиляции Java-решений). Поскольку ограничение по времени проверяет {{coact.exe}}, оно же для {{StdSwp}} повышено: |
| {code:title=task.cfg} |
| TIME_LIMIT = 5 |
| {code} |
| Для обработки чекера был написан вспомогательный чекер [{{InteractChecker.jar}}|http://dl.gsu.by/images/agulenko/neerc/InteractChecker.jar] ([исходники|http://dl.gsu.by/images/agulenko/neerc/InteractChecker-src.rar]), запускаемый с помощью скрипта {{checker.bat}} (из-за особенностей Delta пришлось дописать [{{checker.exe}}|http://dl.gsu.by/images/agulenko/neerc/checker.pas], просто вызывающий этот скрипт). |
| |
| h2. {anchor:setup}Процесс установки |
| |
| * Убираем все посторонние файлы из корня задачи, в первую очередь авторские решения и скомпилированные из них экзешники. |
| | * Портируем {{Interact}} и {{Check}} под Java 6: |
| ** копируем файлы из [{{prepare.rar}}|http://dl.gsu.by/images/agulenko/neerc/prepare.rar] в папку с задачей |
| ** запускаем {{prepare.bat}} |
| ** при наличии ошибок компиляции правим код в указанных местах и снова запускаем {{prepare.bat}} |
| ** удаляем содержимое {{prepare.rar}} из папки с задачей |
| * Устанавливаем слой совместимости с DL |
| ** Копируем файлы из [{{release.rar}}|http://dl.gsu.by/images/agulenko/neerc/release.rar] в папку с задачей |
| ** Добавляем в начало {{task.cfg}} следующие строки: |
| {code:title=task.cfg} |
| CHECKER = 1 |
| CHECKSUBJECT = FILE |
| CHECKFILES = {*.*} |
| TYPE = INTERACTIVE |
| {code} |
| ** Меняем {{TIME_LIMIT}} в {{task.cfg}}; ставим ограничения в {{coact.bat}} |
| * Тестируем |
| ** Пробуем отсылать авторские решения на {{Pascal}}/{{C+\+}} |
| |
| h2. {anchor:TODO}TODO |
| |
| * Тестирование: |
| ** прикрутить тестирование решений на Java (прежде всего авторских): |
| *** добавил в скрипты компиляции Java генерацию {{solution.bat}}, в {{stdswp}} -- передачу его содержимого как команды запуска решения |
| **** разнести изменения файлов {{compile_java?.cmd}} и {{stdswp.exe}} по машинам (нету на Nit5) |
| ** установить Java 7 на сервер тестирования (нету на Nit и Nit3) |
| | *** или можно портировать {{Interact}} и {{Check}} под Java 6: |
| **** копируем файлы из [{{prepare.rar}}|http://dl.gsu.by/images/agulenko/neerc/prepare.rar] в папку с задачей |
| **** запускаем {{prepare.bat}} |
| **** при наличии ошибок компиляции правим код в указанных местах и снова запускаем {{prepare.bat}} |
| **** удаляем содержимое {{prepare.rar}} из папки с задачей |