Я пишу пакет рациональных чисел произвольной точности, который мне нужно проверить на правильность и эффективность. Конечно, я мог бы сам составить специальный набор тестов, но, поскольку я далеко не первый, кто этим занимается, полагаю, стоит спросить: может ли кто-нибудь порекомендовать существующий набор тестов, который я мог бы использовать?
Изменить: я написал тестовую процедуру, которая каждый раз в цикле генерирует три случайных числа и проверяет выполнение различных арифметических тождеств. На данный момент было обнаружено несколько ошибок в числовом коде. Вот фактический код:
for (i = 0;; i++)
{
mem = memlo;
printf(fmtw "\r", i);
a = rndnum();
b = rndnum();
c = rndnum();
// Equality
test(eq(a, a));
test(!eq(a, b) || !eq(b, c) || eq(a, c));
// Addition
test(eq(add(add(a, b), c), add(a, add(b, c))));
test(eq(add(a, b), add(b, a)));
test(eq(add(a, zero), a));
// Subtraction
test(eq(sub(add(a, b), b), a));
test(sub(a, a) == zero);
test(eq(sub(a, b), add(a, sub(zero, b))));
// Multiplication
test(eq(mul(mul(a, b), c), mul(a, mul(b, c))));
test(eq(mul(a, b), mul(b, a)));
test(eq(mul(a, one), a));
test(eq(mul(a, add(b, c)), add(mul(a, b), mul(a, c))));
// Division
test(b == zero || eq(div_(mul(a, b), b), a));
test(a == zero || div_(a, a) == (one));
test(b == zero || eq(div_(a, b), mul(a, div_(one, b))));
test(c == zero
|| eq(div_(sub(a, b), c), sub(div_(a, c), div_(b, c))));
// I/O
test(eq(a, roundtrip(a)));
}