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:
Lephenixnoir 2021-05-18 22:48:56 +02:00
parent 770388a6e5
commit 6e8b333e3b
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
5 changed files with 102 additions and 0 deletions

View File

@ -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

View File

@ -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;

41
src/inttypes/functions.c Normal file
View File

@ -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,
};

49
src/inttypes/sizes.c Normal file
View File

@ -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,
};

View File

@ -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 },