forked from Lephenixnoir/FxLibcTest
setjmp: add basic long jump tests
This commit is contained in:
parent
90dc8b29a6
commit
49a8669669
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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*[]){
|
||||
|
|
|
@ -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,
|
||||
};
|
|
@ -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,
|
||||
};
|
Loading…
Reference in New Issue