| h1. Библиотека DL_I и стандартный чекер для интерактивных задач |
| |
| *{_}Применение._* Библиотека {{DL_I}} реализует базовые функции player'а при тестировании интерактивных задач; другими словами, она подключается player'ом при компиляции и сокращает объём вводимого с нуля кода. |
| |
| На данный момент библиотека реализована на Pascal и C++. |
| |
| h2. Pascal |
| |
| *{_}Подключение._* Подключение библиотек делается командой +Uses список_через_запятую;+ в начале текста программы: |
| {code} |
| Uses |
| DL_I; |
| {code} |
| После подключения библиотеку следует инициализировать (см. _Интерфейс_). |
| |
| *{_}Интерфейс._* Библиотека предоставляет следующие строковые константы: |
| * {{Failed}} \- пометка о непринятом тесте (см. {{RageExit}}); |
| * {{Success}} \- пометка о принятом тесте и выводимое чекером сообщение по умолчанию при принятом тесте (см. {{Succeed}}); |
| * {{TesterFail}} \- сообщение, выводимое чекером при преждевременном завершении player'а (при ошибке); |
| * {{BadIO}} \- сообщение о некорректном вводе, предназначенное для использования с {{RageExit}}; |
| * {{OutOfRange}} \- сообщение о некорректном значении введённой величины, предназначенное для использования с {{RageExit}}. |
| |
| Также предоставлены следующие процедуры: |
| {code} |
| Procedure Init (OutFileName : AnsiString); |
| {code} |
| \- процедура инициализации библиотеки, должна быть запущена самой первой (параметр - имя выходного файла player'а). |
| {code} |
| Procedure RageExit (ErrMsg : AnsiString); OverLoad; |
| Procedure RageExit (ErrMsg1 : AnsiString; Number : LongWord; ErrMsg2 : AnsiString); OverLoad; |
| {code} |
| \- процедура, выводящая в выходной файл пометку о непройденном тесте и сообщение ErrMsg, которое чекер выводит в комментарии (туда можно поместить информацию о причине отрицательного результата). Для удобства процедура перегружена с параметрами строка-число-строка, на случай, если потребуется вывести число в середине строки; при необходимости более сложных выводов следует пользоваться процедурой +WriteStr+ стандартной библиотеки: |
| {code} |
| WriteStr(S, 'Немного текста ', (Pi*R*R):0:10, '/', R*R:10); |
| RageExit(S); |
| {code} |
| {code} |
| Procedure Succeed (Comment : AnsiString = Success); OverLoad; |
| Procedure Succeed (Comment1 : AnsiString; Number : LongWord; Comment2 : AnsiString); OverLoad; |
| {code} |
| \- процедура, выводящая в выходной файл пометку о пройденном тесте и сообщение Comment, по умолчанию равное Success, которое чекер выводит в комментарии (туда можно поместить дополнительную информацию о результате). |
| |
| h2. C+\+ |
| |
| *{_}Подключение._* Подключение библиотеки делается командой +\# include <название>+ в начале текста программы: |
| {code} |
| # include <DL_I.h> |
| {code} |
| После подключения библиотеку следует инициализировать (см. _Интерфейс_). |
| |
| *{_}Интерфейс._* Библиотека предоставляет следующие строковые константы: |
| * {{Failed}} \- пометка о непринятом тесте (см. {{RageExit}}); |
| * {{Success}} \- пометка о принятом тесте и выводимое чекером сообщение по умолчанию при принятом тесте (см. {{Succeed}}); |
| * {{TesterFail}} \- сообщение, выводимое чекером при преждевременном завершении player'а (при ошибке); |
| * {{BadIO}} \- сообщение о некорректном вводе, предназначенное для использования с {{RageExit}}; |
| * {{OutOfRange}} \- сообщение о некорректном значении введённой величины, предназначенное для использования с {{RageExit}}. |
| |
| Также предоставлены следующие функции: |
| {code} |
| void Init (const char* OutFileName); |
| {code} |
| \- процедура инициализации библиотеки, должна быть запущена самой первой (параметр - имя выходного файла player'а). |
| {code} |
| void RageExit (const char* ErrMsg, ...); |
| {code} |
| \- процедура, выводящая в выходной файл пометку о непройденном тесте и сообщение ErrMsg, которое чекер выводит в комментарии (туда можно поместить информацию о причине отрицательного результата). ErrMsg может быть шаблоном строки; можно добавлять любое число дополнительных параметров (параметры такие же, как и у +printf+): |
| {code} |
| RageExit("Немного текста %.10lf/%10ld", (double)Pi()*R*R, (long)R*R); |
| {code} |
| {code} |
| void Succeed (); |
| void Succeed (const char* Comment, ...); |
| {code} |
| \- процедура, выводящая в выходной файл пометку о пройденном тесте и сообщение Comment (по умолчанию = Success), которое чекер выводит в комментарии (туда можно поместить дополнительную информацию о результате). |
| |
| h2. Дополнительно |
| |
| | *{_}Чекер._* Для обработки вывода DL_I существует стандартный чекер. Исходный код: [здесь|]. |
| | *{_}Чекер._* Для обработки вывода DL_I существует [стандартный чекер|http://dl.gsu.by/images/agulenko/DL_I_checker.exe] ([исходный код|http://dl.gsu.by/images/agulenko/DL_I_checker.pas]). |
| |
| *{_}Важные моменты._* Стандартный чекер для интерактивных задач не позволяет тестировать интерактивные задачи, в которых существует возможность |
| частичного принятия теста (качественная оценка результата). Также, чекер предназначен для player'ов, делающих вывод в формате {{DL_I}}; так что для |
| player'ов, не использующих эту библиотеку (в частности, сторонних) он неприменим. Поэтому в подобных случаях приходится реализовывать другой чекер |
| (впрочем, проще всего сделать модификацию этого); файл вывода player'а должен содержать информацию, на основе которой чекер сможет определить результат |
| тестирования (опять же, за основу можно взять функции из кода {{DL_I}}). |
| |
| | *{_}Исходный код{_}* библиотеки содержится [здесь|]. |
| | *{_}Исходный код{_}* библиотеки содержится [здесь|http://dl.gsu.by/images/agulenko/DL_I.rar]. |
| |
| | *{_}Пример{_}* player'а, написанного с использованием библиотеки {{DL_I}}, содержится [здесь|]. |
| | *{_}Пример{_}* player'а, написанного с использованием библиотеки {{DL_I}}, содержится [здесь|http://dl.gsu.by/images/agulenko/DL_I_player.pas]. |
| |
| В этом примере тестируемая программа должна угадать натуральное число в заданных пределах; player выводит <{{H}}>, если искомое число больше предлагаемого, <{{L}}> - если меньше, <{{OK}}> - если программа угадала (в этом случае ей надлежит завершить работу). |
| |
| Примеры установленных задач: [Pascal|], [C++|]. |