Клиент 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
устанавливают ограничения.