forked from Lephenixnoir/FxLibcTest
inttypes: add type size inspection, and tests for imaxabs and imaxdiv
Tests for imaxabs and imaxdiv are not really needed as this is just the same thing is llabs and lldiv.
This commit is contained in:
parent
770388a6e5
commit
6e8b333e3b
|
@ -24,6 +24,9 @@ set(SOURCES
|
|||
src/ctype/charprops.c
|
||||
src/ctype/classes.c
|
||||
src/ctype/convert.c
|
||||
# inttypes
|
||||
src/inttypes/functions.c
|
||||
src/inttypes/sizes.c
|
||||
# stdlib
|
||||
src/stdlib/arith.c
|
||||
# string
|
||||
|
|
|
@ -13,6 +13,10 @@ extern ft_test ft_ctype_functions;
|
|||
extern ft_test ft_ctype_convert_macros;
|
||||
extern ft_test ft_ctype_convert_functions;
|
||||
|
||||
/* inttypes */
|
||||
extern ft_test ft_inttypes_sizes;
|
||||
extern ft_test ft_inttypes_functions;
|
||||
|
||||
/* stdlib */
|
||||
extern ft_test ft_stdlib_arith;
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
#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_test ft_inttypes_functions = {
|
||||
.name = "Extended integer functions",
|
||||
.function = _ft_inttypes_functions,
|
||||
};
|
|
@ -0,0 +1,49 @@
|
|||
#include <inttypes.h>
|
||||
#include <stddef.h>
|
||||
#include <ft/test.h>
|
||||
#include <ft/all-tests.h>
|
||||
|
||||
static void _inttypes_sizes(ft_test *t)
|
||||
{
|
||||
ft_assert(t, sizeof(int8_t) == sizeof(uint8_t));
|
||||
ft_assert(t, sizeof(int16_t) == sizeof(uint16_t));
|
||||
ft_assert(t, sizeof(int32_t) == sizeof(uint32_t));
|
||||
ft_assert(t, sizeof(int64_t) == sizeof(uint64_t));
|
||||
ft_assert(t, sizeof(int_least8_t) == sizeof(uint_least8_t));
|
||||
ft_assert(t, sizeof(int_least16_t) == sizeof(uint_least16_t));
|
||||
ft_assert(t, sizeof(int_least32_t) == sizeof(uint_least32_t));
|
||||
ft_assert(t, sizeof(int_least64_t) == sizeof(uint_least64_t));
|
||||
ft_assert(t, sizeof(int_fast8_t) == sizeof(uint_fast8_t));
|
||||
ft_assert(t, sizeof(int_fast16_t) == sizeof(uint_fast16_t));
|
||||
ft_assert(t, sizeof(int_fast32_t) == sizeof(uint_fast32_t));
|
||||
ft_assert(t, sizeof(int_fast64_t) == sizeof(uint_fast64_t));
|
||||
ft_assert(t, sizeof(intmax_t) == sizeof(uintmax_t));
|
||||
ft_assert(t, sizeof(intptr_t) == sizeof(uintptr_t));
|
||||
|
||||
/* TODO: Use %zu once available in *printf */
|
||||
ft_log(t, "Size of integer types:\n\n");
|
||||
|
||||
ft_log(t, " %d int8_t\n", (int)sizeof(uint8_t));
|
||||
ft_log(t, " %d int16_t\n", (int)sizeof(uint16_t));
|
||||
ft_log(t, " %d int32_t\n", (int)sizeof(uint32_t));
|
||||
ft_log(t, " %d int64_t\n\n", (int)sizeof(uint64_t));
|
||||
|
||||
ft_log(t, " %d int_least8_t\n", (int)sizeof(uint_least8_t));
|
||||
ft_log(t, " %d int_least16_t\n", (int)sizeof(uint_least16_t));
|
||||
ft_log(t, " %d int_least32_t\n", (int)sizeof(uint_least32_t));
|
||||
ft_log(t, " %d int_least64_t\n\n", (int)sizeof(uint_least64_t));
|
||||
|
||||
ft_log(t, " %d int_fast8_t\n", (int)sizeof(uint_fast8_t));
|
||||
ft_log(t, " %d int_fast16_t\n", (int)sizeof(uint_fast16_t));
|
||||
ft_log(t, " %d int_fast32_t\n", (int)sizeof(uint_fast32_t));
|
||||
ft_log(t, " %d int_fast64_t\n\n", (int)sizeof(uint_fast64_t));
|
||||
|
||||
ft_log(t, " %d intmax_t\n", (int)sizeof(uintmax_t));
|
||||
ft_log(t, " %d intptr_t\n", (int)sizeof(uintptr_t));
|
||||
ft_log(t, " %d size_t\n", (int)sizeof(size_t));
|
||||
}
|
||||
|
||||
ft_test ft_inttypes_sizes = {
|
||||
.name = "Size of integer types",
|
||||
.function = _inttypes_sizes,
|
||||
};
|
|
@ -20,6 +20,11 @@ ft_list headers_libc[] = {
|
|||
&ft_ctype_convert_functions,
|
||||
NULL,
|
||||
}},
|
||||
{ "<inttypes.h>", (ft_test*[]){
|
||||
&ft_inttypes_sizes,
|
||||
&ft_inttypes_functions,
|
||||
NULL,
|
||||
}},
|
||||
{ "<locale.h>", NULL },
|
||||
{ "<setjmp.h>", NULL },
|
||||
{ "<signal.h>", NULL },
|
||||
|
|
Loading…
Reference in New Issue