39 lines
641 B
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,
|
|
};
|