DL Руководство пользователя
Ключ
Эти линии были удалены. Это слово было удалено.
Эти линии были добавлены. Это слово было добавлено.

Просмотр истории страницы


Есть 6 изменений. Просмотреть первое изменение .

 h1. StdSwp: интерфейс тестирования задач с интерактивным вводом-выводом
  
  
 h2. Применение
  
*{_}Применение._* Приложение {{StdSwp}} (Standard Swap) запускается тестирующей системой для задач, которые в [task.cfg|http://dl.gsu.by/doc/use/taskcfg.htm] отмечены как имеющие интерактивный тип ({{type=interactive}}). В качестве параметров ей передаются имена файлов player'а и тестируемой программы. Файл player'а должен находиться в папке задачи (файл {{player.exe}}); также для корректной обработки вывода player'а желательно наличие чекера.
  *{_}Применение._* Приложение [StdSwp|http://dl.gsu.by/images/agulenko/stdswp.exe] (Standard Swap) запускается тестирующей системой для задач, которые в [task.cfg|http://dl.gsu.by/doc/use/taskcfg.htm] отмечены как имеющие интерактивный тип ({{type=interactive}}). В качестве параметров ей передаются имена файлов player'а и тестируемой программы. Файл player'а должен находиться в папке задачи (файл {{player.exe}}); также для корректной обработки вывода player'а желательно наличие чекера.
  
 *{_}Поведение._* {{StdSwp}} работает следующим образом:
 * считывается и обрабатывается файл конфигурации (см. _Конфигурация_);
 * запускаются указанные в параметрах файлы (player и тестируемая программа), стандартные потоки ввода-вывода ({{Input}}/{{Output}} в Pascal, {{stdin}}/{{stdout}} в C/C++) этих программ перенаправляются в буфер {{StdSwp}};
 * пока работают обе программы, {{StdSwp}} продолжает работу, выполняя обмен данными между программами;
 * когда одна из программ завершает работу, {{StdSwp}} перенаправляет её оставшийся вывод на вход другой программе и (по умолчанию) ожидает её завершения.
  
 h2. Настройка
  
*{_}Конфигурация._* Детали поведения {{StdSwp}} можно задавать, поместив в рабочую папку файл {{stdswp.cfg}}; для этого следует поместить его
  *{_}Конфигурация._* Детали поведения {{StdSwp}} можно задавать, поместив в рабочую папку файл {{stdswp.cfg}}; для этого следует поместить его
 в папку задачи и сделать в [task.cfg|http://dl.gsu.by/doc/use/taskcfg.htm] пометку о необходимости его копирования в директорию тестирования:
 {code:title=task.cfg}
 checksubject=file
 checkfiles={stdswp.cfg}
 {code}
 Файл {{stdswp.cfg}} обрабатывается по следующим правилам:
 * каждая строка обрабатывается отдельно;
 * если в строке есть символ <{{\#}}>, все символы в строке начиная с него игнорируются (комментарий);
 * если в строке (вне комментария) отсутствует символ <{{=}}>, она игнорируется (не соответствует формату);
 * оставшиеся строки считаются представленными в следующем формате:
 {code}
 ИмяОпции=Значение
 {code}
  
 Распознаваемые опции:
 * {{KillSolution}} (возможные значения {{Yes}} и {{No}}) - при значении {{Yes}} работа тестируемой программы завершается принудительно после завершения работы player'а, значение по умолчанию - {{No}};
 * {{KillPlayer}} (возможные значения {{Yes}} и {{No}}) - при значении {{Yes}} работа player'а завершается принудительно после завершения работы тестируемой программы, значение по умолчанию - {{No}};
 * {{ListenError}} (возможные значения {{Yes}} и {{No}}) - при значении {{Yes}} тестирование прерывается принудительно, если player делает вывод в stderr (предназначена для прерывания тестирования при некорректном выводе тестируемой программы, также ловит ошибки player'а), значение по умолчанию - {{Yes}}.
  
 h2. Дополнительно
  
 *{_}Примеры._* Пример файла {{stdswp.cfg}}:
 {code:title=stdswp.cfg}
 # завершить программу после остановки player'а
 KillSolution=yes
 # раскомментировать для завершения player'а
 # после остановки программы
 #KillPlayer=YES
 {code}
 
 *{_}Важные моменты._* Существуют некоторые особенности, которые следует учитывать при тестировании интерактивных задач с помощью программы {{StdSwp}}:
 * поскольку стандартные потоки ввода-вывода перенаправляются системными средствами (pipe'ами) в буфер другой программы, для работы с файлами их использовать нельзя - вместо них нужно использовать файловые переменные (в Pascal) или файловые потоки (в C/C++);
  
 * размер буфера ограничен, поэтому, если одна из программ делает многократный вывод, а другая этот вывод не читает, рано или поздно буфер будет переполнен, и обмен данными прекратится (обе программы, скорее всего, <зависнут> в ожидании ввода);
  
 * похожая ситуация может произойти при неправильно написанном player'е или решении - каждая из двух программ будет ожидать вывода от другой (зачастую причиной ошибки может быть отсутствие {{Flush(Output)}}/{{flush(stdout)}} после операций вывода: если не принуждать программу к завершению вывода перед чтением, другая программа будет ожидать завершения вывода);
  
 * операции ввода-вывода сами по себе занимают сравнительно длительное время, поэтому оценка длительности работы программы при множественном обмене данными вырастает на пару порядков;
  
 * если тестируемая программа делает некорректный вывод, player'у следует отразить это в файле вывода, и +вывести что-нибудь в stderr+ (см. {{ListenError}}); если этого не сделать, то программа, скорее всего, будет ожидать ввода, пока тестирующая система не завершит её работу (в этом случае система <Дистанционного обучения> игнорирует файл вывода и сообщает, что программа была снята с выполнения по превышении лимита времени);
  
 * если тестируемая программа завершила работу, а player продолжает ждать вывода, он будет снят с выполнения по превышении лимита времени с выдачей соответствующего сообщения;
  
 * при групповом тестировании интерактивных задач сообщения чекера игнорируются (при реализации интерактивного типа возможность группового тестирования не учитывалась).
  
*{_}Исходный код{_}* программы содержится [здесь|].
  *{_}Исходный код{_}* программы содержится [здесь|http://dl.gsu.by/images/agulenko/stdswp.pas].
  
 _*Примеры*_ установленных задач: [].
  *{_}Примеры{_}* установленных задач: \[\].
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами