setjmp: add basic long jump tests

This commit is contained in:
Lephenixnoir 2021-05-29 18:55:05 +02:00
parent 90dc8b29a6
commit 49a8669669
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
5 changed files with 69 additions and 1 deletions

View File

@ -27,6 +27,9 @@ set(SOURCES
# inttypes
src/inttypes/functions.c
src/inttypes/sizes.c
# setjmp
src/setjmp/massive.c
src/setjmp/simple.c
# stdlib
src/stdlib/arith.c
src/stdlib/fpconv.c

View File

@ -15,6 +15,10 @@ extern ft_test ft_ctype_conversion;
extern ft_test ft_inttypes_sizes;
extern ft_test ft_inttypes_functions;
/* setjmp */
extern ft_test ft_setjmp_simple;
extern ft_test ft_setjmp_massive;
/* stdlib */
extern ft_test ft_stdlib_arith;
extern ft_test ft_stdlib_sizes;

View File

@ -28,7 +28,11 @@ ft_list headers_libc[] = {
NULL,
}},
{ "<locale.h>", NULL },
{ "<setjmp.h>", NULL },
{ "<setjmp.h>", (ft_test*[]){
&ft_setjmp_simple,
&ft_setjmp_massive,
NULL,
}},
{ "<signal.h>", NULL },
{ "<stdio.h>", NULL },
{ "<stdlib.h>", (ft_test*[]){

19
src/setjmp/massive.c Normal file
View File

@ -0,0 +1,19 @@
#include <ft/test.h>
#include <ft/all-tests.h>
#include <setjmp.h>
static void _ft_setjmp_massive(ft_test *t)
{
jmp_buf jb;
int rc = setjmp(jb);
while(rc < 1000) longjmp(jb, rc + 1);
/* Does it finish, is the question */
ft_assert(t, true);
}
ft_test ft_setjmp_massive = {
.name = "Massive long jumps",
.function = _ft_setjmp_massive,
};

38
src/setjmp/simple.c Normal file
View File

@ -0,0 +1,38 @@
#include <ft/test.h>
#include <ft/all-tests.h>
#include <setjmp.h>
void sub2(ft_test *t, jmp_buf jb)
{
ft_log(t, "sub2\n");
longjmp(jb, 73);
}
void sub1(ft_test *t, jmp_buf jb)
{
ft_log(t, "sub1\n");
sub2(t, jb);
}
static void _ft_setjmp_simple(ft_test *t)
{
volatile int return_count = 0;
jmp_buf jb;
int rc = setjmp(jb);
return_count++;
ft_log(t, "setjmp #%d returned %d\n", return_count, rc);
ft_assert(t, (rc == 0) || (rc == 73));
if(rc == 0) {
sub1(t, jb);
}
else {
ft_assert(t, (rc == 73) && (return_count == 2));
}
}
ft_test ft_setjmp_simple = {
.name = "Simple long jump",
.function = _ft_setjmp_simple,
};