stdlib: add tests for abs, labs, llabs, div, ldiv, lldiv

This commit is contained in:
Lephenixnoir 2021-05-18 22:48:02 +02:00
parent c7a6d0484a
commit 770388a6e5
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
4 changed files with 73 additions and 1 deletions

View File

@ -24,6 +24,8 @@ set(SOURCES
src/ctype/charprops.c
src/ctype/classes.c
src/ctype/convert.c
# stdlib
src/stdlib/arith.c
# string
src/string/memarray.c
src/string/core.c

View File

@ -13,6 +13,9 @@ extern ft_test ft_ctype_functions;
extern ft_test ft_ctype_convert_macros;
extern ft_test ft_ctype_convert_functions;
/* stdlib */
extern ft_test ft_stdlib_arith;
/* string */
extern ft_test ft_string_memset;
extern ft_test ft_string_memcpy;

View File

@ -28,7 +28,10 @@ ft_list headers_libc[] = {
{ "Format types and options", NULL, NULL },
{ NULL },
}}, */
{ "<stdlib.h>", NULL },
{ "<stdlib.h>", (ft_test*[]){
&ft_stdlib_arith,
NULL,
}},
{ "<string.h>", (ft_test*[]){
&ft_string_memset,
&ft_string_memcpy,

64
src/stdlib/arith.c Normal file
View File

@ -0,0 +1,64 @@
#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,
};