FxLibcTest/src/inttypes/functions.c

48 lines
1.6 KiB
C

#include <inttypes.h>
#include <limits.h>
#include <ft/test.h>
#include <ft/all-tests.h>
static void _ft_inttypes_functions(ft_test *t)
{
ft_log(t, "abs with function:\n");
ft_assert_eval(t, imaxabs(73ll), 73ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(-73ll), 73ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(0ll), 0ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(LLONG_MAX), LLONG_MAX, "%" PRIdMAX);
/* Very edgy corner case */
ft_assert_eval(t, imaxabs(LLONG_MIN), LLONG_MIN, "%" PRIdMAX);
#undef imaxabs
ft_log(t, "\nabs with macro:\n");
ft_assert_eval(t, imaxabs(73ll), 73ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(-73ll), 73ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(0ll), 0ll, "%" PRIdMAX);
ft_assert_eval(t, imaxabs(LLONG_MAX), LLONG_MAX, "%" PRIdMAX);
/* Very edgy corner case */
ft_assert_eval(t, imaxabs(LLONG_MIN), LLONG_MIN, "%" PRIdMAX);
ft_log(t, "\ndiv: by asserts (not shown)\n");
imaxdiv_t imd;
imd = imaxdiv(73ll, 8ll);
ft_assert(t, imd.quot == 9ll && imd.rem == 1ll);
imd = imaxdiv(-73ll, 8ll);
ft_assert(t, imd.quot == -9ll && imd.rem == -1ll);
imd = imaxdiv(73ll, -8ll);
ft_assert(t, imd.quot == -9ll && imd.rem == 1ll);
imd = imaxdiv(-73ll, -8ll);
ft_assert(t, imd.quot == 9ll && imd.rem == -1ll);
ft_log(t, "\nstrtoimax and strtoumax:\n");
ft_assert_eval(t, strtoimax("-281474976710656", NULL, 0),
-281474976710656ll, "%" PRIdMAX);
ft_assert_eval(t, strtoumax("281474976710656", NULL, 0),
281474976710656ll, "%" PRIuMAX);
}
ft_test ft_inttypes_functions = {
.name = "Extended integer functions",
.function = _ft_inttypes_functions,
};