Клиент ejudge и локальная система тестирования.
- Компилятор с поддержкой С++17 (проверены clang 7.0, gcc 8.0, msvc 19.16)
- cmake 3.12 или выше
- conan (опционально)
Наиболее простой способ установки зависимостей — использование conan. В этом случае достаточно установить conan:
# pip install conan
И проверить, доступен ли conan в PATH:
$ conan --version
В качестве альтернативы можно использовать системные библиотеки:
# pacman -S cmake boost curl
# apt-get install cmake libboost-all-dev curl
$ git clone https://github.com/BigRedEye/cacos.git --recursive
$ mkdir cacos/build
$ cd cacos/build$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCACOS_USE_CONAN=ON
$ cmake --build . --parallel $(nproc) --config Release$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCACOS_USE_CONAN=OFF
$ cmake --build . --parallel $(nproc) --config Release# cmake --build . --target install
На самом деле, достаточно добавить добавить собранный bin/cacos[.exe] в PATH.
Авторизация в ejudge может быть настроена двумя способами.
Более простой — хранение пароля открытым текстом в ~/.config/cacos/cacos.toml (или аналоге). Для этого достаточно один раз прописать:
$ cacos config global --login <LOGIN> --password <PASSWORD> --contest_id <CONTEST_ID> --url <URL>
где URL — путь до страницы авторизации в ejudge (https://caos.ejudge.ru/ej/client), а CONTEST_ID — параметр GET запроса на страницу авторизации (например, для https://caos.ejudge.ru/ej/client?contest_id=72 CONTEST_ID равен 72).
Второй вариант — передача существующей сессии командам cacos: дописывайте
$ cacos ... --url <URL> --contest_id <CONTEST_ID> --cookie <COOKIE> --token <TOKEN>
где COOKIE — значение куки EJSID (в Chrome можно найти в Developer Tools -> Application -> Cookies), а TOKEN — токен, добавляющийся к url-у всех страниц ejudge: например, для https://caos.ejudge.ru/ej/client/main-page/S5912f2126073f1a7?lt=1 токен есть S5912f2126073f1a7.
$ cacos status
$ cacos task statement sm34-5
(в настоящее время не все условия отображаются корректно, будет исправлено).
$ cacos task run list sm12-3
$ cacos task run get <RUN_ID>
где RUN_ID — номер посылки из task run list.
$ cacos task run dump --output <PATH>
где PATH — путь для сохранения.
$ cacos task diff <FIRST> <SECOND>
где FIRST и SECOND — номера посылок или пути до локальных файлов.
Тесты делятся на два вида — canonical и diff. Для первых задан ожидаемый вывод, для вторых требуется чекер.
Компиляторы, линкеры и интерпретаторы описаны в файле langs.toml; при первом запуске стандартная конфигурация будет установлена в ~/.config/cacos/ или аналог.
Прежде всего, выполните
$ cacos init
в директории задачи.
Опционально можно настроить параметны тестируемой программы:
$ cacos config task --sources "main.c,test.cpp,mod.rs" --arch x86 --tl 0.2 --ml 64 --build debug
$ cacos test add canonical --input test.in --output test.out --name "suite/test0"
$ cacos test add diff --input test.in --name "suite/test0"
$ cacos test add diff --input test.in --name "suite/test0" --env KEY=VALUE --arg 123 --arg "hello "
$ cacos test gen diff --for VAR:FROM:TO:STEP --name <NAME> --generator <GENERATOR> --gen.stdin <GEN_INPUT> --test.stdin <TEST_INPUT>
$ cacos test gen canonical --for VAR:FROM:TO:STEP --name <NAME> --generator <GENERATOR> --gen.stdin <GEN_INPUT> --test.stdin <TEST_INPUT> --test.stdout <TEST_OUTPUT>
--forзадает переменную с именемVAR, которая доступна через запись@{VAR}в параметрах теста:NAME,GET_INPUT, аргументах (--gen.arg) и переменных окружения (--gen.env) генератора. Для каждой возможной комбинации переменных будет сгенерирован один тест. Например, для--for i:1:3 --for j:1:5:2будут сгенерированны тесты при(i = 1, j = 1),(i = 2, j = 1),(i = 1, j = 3),(i = 2, j = 3).--generator— исполняемый файл или список исходных файлов, разделенных запятыми.--gen.stdin— строка; можно использовать подстановку переменных через@{VAR}.--test.stdin,--test.stdout— файлы; вывод генератора записывается вgen.stdoutиgen.stderr, по умолчанию--test.stdinравенgen.stdout, и для canonical тестов--test.stdoutравенgen.stderr. Другими словами, по умолчанию ввод для теста равен stdout генератора, а вывод — stderr.
Для отладки генератора можно использовать --keep-working-dirs. При указании данного флага все файлы, созданные генератором, не будут удалены.
$ cacos test run
Опциональные параметры:
--exe— список исходных файлов, по умолчанию изcacos.toml(который настраивается черезcacos config task).--checker— исполняемый файл или список исходников чекера. Требуется для diff тестов.--suite— указать конкретное подмножество тестов для запуска.--tl, --mlустанавливают ограничения.