FxLibcTest/src/setjmp/simple.c

39 lines
641 B
C

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