-
Notifications
You must be signed in to change notification settings - Fork 0
General Documentation
Обратите внимание, что я использую не точные сигнатуры функций.
В частности, не указаны, где неважно, ссылки, const-модификаторы, упрощены возвращаемые типы (убраны enable_if).
За подробностями добро пожаловать в исходный код.
-
Вывод данных
-
string toString(T value)- возвращает строковое представлениеvalue. Используетсяoperator <<дляostream -
string rangeToString(T begin, T end)- строковое представление коллекции ([в начале, потом элементы коллекции разделенные,,]в конце) -
string toPrint(T value)- представление для вывода чекера/валидатора. В данный момент обрамляет в кавычки и оставляет начало и конец строки, заменяя остальное многоточием, если строка длинная (т.е. больше 70 символов) -
string expectation(T expected, U found)- возвращает "expectedexpected,foundfound"
-
-
class
IStream- класс для работы со stream-ами. В валидаторе доступен 1 потокinf, в чекерах - 3:-
T read<T>(Reader<T> reader, args...)- чтение с помощью reader с аргументамиargs -
T read<T>(args...)- чтение с помощью Reader по умолчанию с аргументамиargs -
void fill(T& var, args...)- считать значение типаTв переменнуюvar -
operator >> (T& var)- то же, что fill без аргументов. Возвращает*this -
void setStrict(),void setNonStrict()- установить строгость потока. По умолчанию STRICT для валидатора, NON_STRICT для чекера. В нестрогом режиме игнорирутся пробельные символы -
Mode getMode()- возвращает уровень строгости потока (STRICT или NON_STRICT). -
readEof()- убедиться, что читать нечего -
readToken()- считать токен. Если в nonstrict режиме, то сначала пропустит все пробельные символы (' ','\n','\r','\t'), а потом до первого пробельного символа читает токен. Если токен пустой, то presentation error. -
readChar()- считать следующий символ -
readChar(char c)- убедиться, что следующий символcи считать его -
readSpace(),readEoln()- прочитать пробел и перенос строки соответственно -
bool seekEoln()(bool seekEof()) - проверить, дочитана ли строка(поток)
Методы ниже(низкоуровневые методы) по возможности следует избегать в чекерах и валидаторах:
-
int peek()- просмотреть следующий символ без чтения.EOF, если поток пуст -
int get()- прочитать следующий символ.EOF, если поток пуст
-
-
class Separator- класс, который в себе содержит строку, которую он будет пытаться читать при вызове методаread().
Конструкторы:Separator(char c)Separator(char* c)Separator(string c)
Имеет единственный метод
read(), который пытается прочитать допустимую строку. -
class DefaultReader<T>- способ чтения по умолчанию. См. Reader
Реализован для следующих типов: -
class Reader<T>Reader - класс для чтения данных. Передается вIStream::read(). Принимает stream и произвольное число аргументов. [Написание своего Reader'а] см. также- DefaultReader
- [Reader с зафиксированными аргументами](Reader с зафиксированными аргументами)
- [Написание собственного Reader]
-
class AliasНужен для того, чтобы использовать по умолчанию другойReader. Использование:typedef Alias<string, LineReader> Line;, после чего можно использовать Line, как строку, читаться она будет по умолчанию построчно. Реализована неявная конвертация в обе стороны.string nextLine = inf.read<Line>(); -
Написание чекеров и валидаторов.
- Чекеры:
TESTLIB_CHECK() { //your code; //Здесь доступны 3 потока(IStream&) //`inf` - с входными данными //`ouf` с выходными //`ans` с правильным ответом. }
- Валидаторы:
TESTLIB_VALIDATE() { // validator code // Здесь доступен поток(IStream&) inf. }
-
Коды возврата.
По умолчанию используются стандартные коды возврата:- OK 0
- WA 1
- PE 2
- FAIL 3
-
частичный результат XX
При определении константы
EJUDGEкоды возврата меняются:- WA 5
- PE 4
- FAIL 6
При определении константы
TESTSYSчастичный результат X-X + 50Так же можно явно указать свои коды возврата, используя константыOK_EXIT_CODE,WA_EXIT_CODE,PE_EXIT_CODE,FAIL_EXIT_CODE,PARTIALLY_EXIT_CODE, используяdefineперед#include "testlib.hpp", либо опции компиляции. Последняя опция отвечает за константу, которая прибавляется к возвращаемому значению. Например, чтобы показатьчастично верно 10, возвращаетсяPARTIALLY_EXIT_CODE + 10В чекере вы можете управлять результатом вывода следующими способами:
-
Макросы
QUIT(Verdict, msg),WA(msg),OK(msg),FAIL(msg),PE(msg). Обратите внимание, что msg может содержать в себе<<для вывода нескольких объектов. Пример:WA("bad number " << n); -
Макрос
ensure(condition)падает c FAIL, еслиconditionложно -
Макрос
verify(condition, verdict, msg). Тоже, чтоensure, но падает с вердиктомverdictи выводит сообщениеmsg.msg- то же, что и вQUIT() -
Функции
verify*(..., verdict);Проверяет, что условие, соответствующее названию, выполняется. В противном случае возвращаетсяverdict.-
verifyEqual(T a, T b)- простая проверка на равенство. -
verifyEqualRange(Iter start1, Iter end1, Iter start2, Iter start2)- проверяет, что диапазоны[start1, end1),[start2, end2)равны. -
verifySorted(Iter start, Iter end)- проверяет, что диапазон[start, end)отсортирован. Проверка производится с помощьюoperator <
-
-
Стандартные ридеры сообщают об ошибках чтения
-
Другие полезные функции:
-
string englishEnding(n)- возвращает последние 2 буквы записи порядкого числительногоnна английском языке -
bool areClose(T expected, T value, T eps)- возвращаетtrue, если абсолютная или относительная погрешность не превосходитeps
-