Каталог задачи daysper
Что считается каталогом с задачей[править | править код]
Нередко daysper'у надо определять, является ли определенный каталог "каталогом с задачей", т.е. верно ли, что он содержит материалы некоторой задачи (т.е. надо ли при рекурсивной генерации тестов генерировать тесты в этой задаче и т.п.).
Критерий определения следующий: каталог считается каталогом с задачей тогда и только тогда, когда в нем есть подкаталог с исходниками тестов, т.е. подкаталог с названием, определяемым параметром source-directory файла daysper.ini (по умолчанию — tests).
Случай, когда в некотором каталоге есть файл daysper.ini, устанавливающий определенное значение параметра source-directory, и в этом же каталоге есть подкаталог с названием, совпадающим с этим значением, обрабатывается корректно, т.е. этот каталог считается каталогом с задачей. Аналогично, если файл daysper.ini в некотором каталоге изменяет значение параметра source-directory на название, не совпадающее ни с одним подкаталогом этого каталога, то этот каталог не считается каталогом с задачей.
Вложенные задачи, как правило, не допускаются, т.е. при поиске задач по дереву каталогов если какой-то каталог определен как каталог с задачей, то его подкаталоги просматриваться не будут.
Примеры:
- если все настройки daysper по умолчанию, то каталогом с задачей считается любой каталог, в котором есть подкаталог tests.
- если в (действующем в данном каталоге, см. область действия файлов daysper.ini) файле daysper.ini указано source-directory=src, то каталогом с задачей будет считаться любой каталог, в котором есть подкаталог src.
- если в каталоге есть подкаталог foo и файл daysper.ini, в котором указано source-directory=foo, то этот каталог тоже будет считаться каталогом с задачей.
- если в каталоге нет подкаталога foo и есть файл daysper.ini, в котором указано source-directory=foo, то этот каталог не будет считаться каталогом с задачей.
Структура каталога с задачей[править | править код]
Daysper использует следующую структуру каталога с задачей:
- statement\ — каталог, в котором должен находиться TeX-файл с условием задачи, а также все требуемые ему файлы. Файл с условием задачи должен называться id.tex, где id — идентификатор задачи.
- statement-ready\ (каталог не требуется, а создается daysper'ом) — каталог, куда daysper положит скомпилированные .ps и .pdf-условия.
- tests\ (название каталога настраивается в daysper.ini) — каталог с исходниками тестов: ручные тесты, генераторы, скрипты генерации и т.д. Именно этот подкаталог (как описано выше) и является критерием того, что текущий каталог является каталогом с задачей.
- work\ (каталог не требуется, а создается daysper'ом) — каталог, в котором daysper запускает все скрипты.
- tests-ready\ (название каталога настраивается в daysper.ini; каталог не требуется, а создается daysper'ом) — каталог, куда daysper кладет сгенерированные тесты.
В каталоге с задачей также должны находиться следующие файлы:
- Решения жюри, см. ниже.
- Чекер. Должен называться check.*.
- Валидатор. Должен называться validate.*.
- При необходимости, тут может находиться файл daysper.ini. Его настройки (в соответствии с областью действия файлов daysper.ini) будут распространяться на эту задачу.
- Прочие файлы, необходимые программам (testlib и т.п.)
Формат названий решений жюри[править | править код]
Различные команды daysper'а требуют указания не полного названия решения, а только идентификатора. Решение с идентификатором solid у задачи с идентификатором problemid daysper ищет в файлах:
- solid.*
- problemid_solid.*
- solution_solid.*
- Более строго: для каждого указанного в daysper.ini расширения (суффикса) языка программирования daysper подставляет его вместо .* в шаблонах выше и ищет соответствующий файл. В случае, если находится несколько файлов, поведение daysper не определено.
Пример структуры каталога[править | править код]
Пример структуры каталога (до запуска всех команд daysper, т.е. здесь не указаны файлы, создаваемые daysper, а присутствуют только те файлы, которые надо создать вручную):
- statement\
- aplusb.tex
- tests\
- 01.a.hand
- 01.hand
- 02.a.hand
- 02.hand
- 03.a.hand
- 03.hand
- do_all.d
- do_st.d
- gen.dpr
- st01.hand
- st01.hand.a
- st02.hand
- st02.hand.a
- aplusb_c.cpp
- aplusb_h.php
- aplusb_j.java
- aplusb_pk.pas
- aplusb_pkwrong.pas
- check.dpr
- daysper.ini
- testlib.pas
- validate.pas
Этот каталог со содержимым всех файлов можно получить следующей командой:
svn co https://burunduk3.geins.ru/svn/public/daysper/test-problems/aplusb