FxLibcTest/src/stdlib/arith.c

65 lines
1.7 KiB
C

#include <stdlib.h>
#include <limits.h>
#include <ft/test.h>
#include <ft/all-tests.h>
static void _ft_stdlib_arith(ft_test *t)
{
div_t d;
ldiv_t ld;
lldiv_t lld;
ft_log(t, "abs with functions:\n");
ft_assert_eval(t, abs(73), 73, "%d");
ft_assert_eval(t, abs(-73), 73, "%d");
ft_assert_eval(t, labs(73l), 73l, "%ld");
ft_assert_eval(t, labs(-73l), 73l, "%ld");
ft_assert_eval(t, llabs(73ll), 73ll, "%lld");
ft_assert_eval(t, llabs(-73ll), 73ll, "%lld");
#undef abs
#undef labs
#undef llabs
ft_log(t, "\nabs with macros:\n");
ft_assert_eval(t, abs(73), 73, "%d");
ft_assert_eval(t, abs(-73), 73, "%d");
ft_assert_eval(t, labs(73l), 73l, "%ld");
ft_assert_eval(t, labs(-73l), 73l, "%ld");
ft_assert_eval(t, llabs(73ll), 73ll, "%lld");
ft_assert_eval(t, llabs(-73ll), 73ll, "%lld");
ft_log(t, "\ndiv: by asserts (not shown)\n");
d = div(73, 8);
ft_assert(t, d.quot == 9 && d.rem == 1);
d = div(-73, 8);
ft_assert(t, d.quot == -9 && d.rem == -1);
d = div(73, -8);
ft_assert(t, d.quot == -9 && d.rem == 1);
d = div(-73, -8);
ft_assert(t, d.quot == 9 && d.rem == -1);
ld = ldiv(73l, 8l);
ft_assert(t, ld.quot == 9l && ld.rem == 1l);
ld = ldiv(-73l, 8l);
ft_assert(t, ld.quot == -9l && ld.rem == -1l);
ld = ldiv(73l, -8l);
ft_assert(t, ld.quot == -9l && ld.rem == 1l);
ld = ldiv(-73l, -8l);
ft_assert(t, ld.quot == 9l && ld.rem == -1l);
lld = lldiv(73ll, 8ll);
ft_assert(t, lld.quot == 9ll && lld.rem == 1ll);
lld = lldiv(-73ll, 8ll);
ft_assert(t, lld.quot == -9ll && lld.rem == -1ll);
lld = lldiv(73ll, -8ll);
ft_assert(t, lld.quot == -9ll && lld.rem == 1ll);
lld = lldiv(-73ll, -8ll);
ft_assert(t, lld.quot == 9ll && lld.rem == -1ll);
}
ft_test ft_stdlib_arith = {
.name = "Integer arithmetic functions",
.function = _ft_stdlib_arith,
};