Skip to content
This repository was archived by the owner on Feb 6, 2022. It is now read-only.

Commit fb91ec3

Browse files
authored
Merge pull request #8 from BigRedEye/doc
docs: Update documentation
2 parents 2afaf07 + a88b000 commit fb91ec3

File tree

1 file changed

+117
-4
lines changed

1 file changed

+117
-4
lines changed

README.md

Lines changed: 117 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,29 @@
11
# cacos
22
[![Build Status](https://travis-ci.com/BigRedEye/cacos.svg?token=HabA2F1p73cnpyrz3Jdj&branch=dev)](https://travis-ci.com/BigRedEye/cacos)
3+
[![Build status](https://ci.appveyor.com/api/projects/status/TODO/branch/dev?svg=true)](https://ci.appveyor.com/project/BigRedEye/cacos)
4+
[![GitHub tag](https://img.shields.io/github/tag/BigRedEye/cacos.svg)](https://semver.org)
5+
[![license](https://img.shields.io/github/license/BigRedEye/cacos.svg)](https://github.com/BigRedEye/cacos/blob/master/LICENSE)
36

47
Клиент ejudge и локальная система тестирования.
58

9+
<a href="https://asciinema.org/a/eWHtvCZtt9fi4jWrBpEGsTNLV?autoplay=1&speed=1.5" target="_blank"><img src="https://asciinema.org/a/eWHtvCZtt9fi4jWrBpEGsTNLV.svg" alt="asciicast" width=600/></a>
10+
11+
## Оглавление
12+
* [Установка](#установка)
13+
* [Зависимости](#зависимости)
14+
* [Сборка](#сборка)
15+
* [Использование](#использование)
16+
* [Клиент ejudge](#клиент-ejudge)
17+
* [Авторизация](#авторизация)
18+
* [Таблица задач](#общая-таблица-задач)
19+
* [Условия](#просмотр-условий)
20+
* [Посылки](#список-посылок-по-задаче)
21+
* [Сравнение посылок](#сравнение-посылок)
22+
* [Тестирование](тестирование)
23+
* [Добавление тестов](#добавление-тестов)
24+
* [Генерация тестов](#генерация-тестов)
25+
* [Запуск тестов](#запуск-тестов)
26+
627
## Установка
728

829
### Собранные бинарники
@@ -20,10 +41,16 @@
2041
+ [libcurl](https://curl.haxx.se/libcurl/)
2142

2243
###### conan
23-
Наиболее простой способ установки зависимостей -- использование [conan](https://conan.io/downloads.html). В этом случае достаточно установить conan:
44+
Наиболее простой способ установки зависимостей использование [conan](https://conan.io/downloads.html). В этом случае достаточно установить conan:
2445
```
2546
# pip install conan
2647
```
48+
И проверить, доступен ли conan в PATH:
49+
```
50+
$ conan --version
51+
```
52+
53+
В качестве альтернативы можно использовать системные библиотеки:
2754

2855
###### Arch Linux
2956
```
@@ -44,12 +71,12 @@ $ cd cacos/build
4471
###### С использованием conan:
4572
```sh
4673
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCACOS_USE_CONAN=ON
47-
$ cmake --build . --parallel $(nproc)
74+
$ cmake --build . --parallel $(nproc) --config Release
4875
```
4976
###### С использованием системных библиотек:
5077
```sh
5178
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCACOS_USE_CONAN=OFF
52-
$ cmake --build . --parallel $(nproc)
79+
$ cmake --build . --parallel $(nproc) --config Release
5380
```
5481

5582
#### Установка
@@ -60,4 +87,90 @@ $ cmake --build . --parallel $(nproc)
6087

6188
## Использование
6289

63-
TODO
90+
#### Клиент ejudge
91+
###### Авторизация
92+
Авторизация в ejudge может быть настроена двумя способами.
93+
Более простой — хранение пароля открытым текстом в `~/.config/cacos/cacos.toml` (или аналоге). Для этого достаточно один раз прописать:
94+
```
95+
$ cacos config global --login <LOGIN> --password <PASSWORD> --contest_id <CONTEST_ID> --url <URL>
96+
```
97+
где `URL` — путь до страницы авторизации в ejudge (https://caos.ejudge.ru/ej/client), а `CONTEST_ID` — параметр GET запроса на страницу авторизации (например, для https://caos.ejudge.ru/ej/client?contest_id=72 `CONTEST_ID` равен 72).
98+
99+
Второй вариант — передача существующей сессии командам cacos: дописывайте
100+
```
101+
$ cacos ... --url <URL> --contest_id <CONTEST_ID> --cookie <COOKIE> --token <TOKEN>
102+
```
103+
где `COOKIE` — значение куки EJSID (в Chrome можно найти в Developer Tools -> Application -> Cookies), а `TOKEN` — токен, добавляющийся к url-у всех страниц ejudge: например, для https://caos.ejudge.ru/ej/client/main-page/S5912f2126073f1a7?lt=1 токен есть `S5912f2126073f1a7`.
104+
105+
###### Общая таблица задач
106+
```
107+
$ cacos status
108+
```
109+
110+
###### Просмотр условий
111+
```
112+
$ cacos task statement sm34-5
113+
```
114+
(в настоящее время не все условия отображаются корректно, будет исправлено).
115+
116+
###### Список посылок по задаче
117+
```
118+
$ cacos task run list sm12-3
119+
```
120+
###### Загрузка посылок
121+
```
122+
$ cacos task run get <RUN_ID>
123+
```
124+
где `RUN_ID` — номер посылки из `task run list`.
125+
126+
###### Сравнение посылок
127+
```
128+
$ cacos task diff <FIRST> <SECOND>
129+
```
130+
где `FIRST` и `SECOND` — номера посылок или пути до локальных файлов.
131+
132+
#### Тестирование
133+
134+
Тесты делятся на два вида — canonical и diff. Для первых задан ожидаемый вывод, для вторых требуется чекер.
135+
136+
Компиляторы, линкеры и интерпретаторы описаны в файле `langs.toml`; при первом запуске [стандартная конфигурация](config/langs.toml) будет установлена в `~/.config/cacos/` или аналог.
137+
138+
Прежде всего, выполните
139+
```
140+
$ cacos init
141+
```
142+
в директории задачи.
143+
144+
Опционально можно настроить параметны тестируемой программы:
145+
```
146+
$ cacos config task --sources "main.c,test.cpp,mod.rs" --arch x86 --tl 0.2 --ml 64 --build debug
147+
```
148+
149+
###### Добавление тестов
150+
```
151+
$ cacos test add canonical --input test.in --output test.out --name "suite/test0"
152+
$ cacos test add diff --input test.in --name "suite/test0"
153+
$ cacos test add diff --input test.in --name "suite/test0" --env KEY=VALUE --arg 123 --arg "hello "
154+
```
155+
156+
###### Генерация тестов
157+
```
158+
$ cacos test gen diff --for VAR:FROM:TO:STEP --name <NAME> --generator <GENERATOR> --gen.stdin <GEN_INPUT> --test.stdin <TEST_INPUT>
159+
$ 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>
160+
```
161+
* `--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)`.
162+
* `--generator` — исполняемый файл или список исходных файлов, разделенных запятыми.
163+
* `--gen.stdin` — строка; можно использовать подстановку переменных через `@{VAR}`.
164+
* `--test.stdin`, `--test.stdout` — файлы; вывод генератора записывается в `gen.stdout` и `gen.stderr`, по умолчанию `--test.stdin` равен `gen.stdout`, и для canonical тестов `--test.stdout` равен `gen.stderr`. Другими словами, по умолчанию ввод для теста равен stdout генератора, а вывод — stderr.
165+
166+
Для отладки генератора можно использовать `--keep-working-dirs`. При указании данного флага все файлы, созданные генератором, не будут удалены.
167+
168+
###### Запуск тестов
169+
```
170+
$ cacos test run
171+
```
172+
Опциональные параметры:
173+
* `--exe` — список исходных файлов, по умолчанию из `cacos.toml` (который настраивается через `cacos config task`).
174+
* `--checker` — исполняемый файл или список исходников чекера. Требуется для diff тестов.
175+
* `--suite` — указать конкретное подмножество тестов для запуска.
176+
* `--tl, --ml` устанавливают ограничения.

0 commit comments

Comments
 (0)