diff options
Diffstat (limited to 'tests/test_core.py')
-rw-r--r-- | tests/test_core.py | 59 |
1 files changed, 3 insertions, 56 deletions
diff --git a/tests/test_core.py b/tests/test_core.py index 136016e5..07edda55 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1124,64 +1124,11 @@ class T(RunnerCore): # Short name, to make it more fun to use manually on the co self.do_run_from_file(src, output) def test_longjmp_stacked(self): - src = r''' - #include <stdio.h> - #include <setjmp.h> - #include <stdlib.h> - #include <string.h> + test_path = path_from_root('tests', 'core', 'test_longjmp_stacked') + src, output = (test_path + s for s in ('.in', '.out')) - int bottom, top; - - int run(int y) { - // confuse stack - char *s = (char*)alloca(100); - memset(s, 1, 100); - s[y] = y; - s[y/2] = y*2; - volatile int x = s[y]; - top = (int)alloca(4); - if (x <= 2) return x; - jmp_buf buf; - printf("setjmp of %d\n", x); - if (setjmp(buf) == 0) { - printf("going\n"); - x += run(x/2); - longjmp(buf, 1); - } - printf("back\n"); - return x/2; - } + self.do_run_from_file(src, output) - int main(int argc, char **argv) { - int sum = 0; - for (int i = 0; i < argc*2; i++) { - bottom = (int)alloca(4); - sum += run(10); - // scorch the earth - if (bottom < top) { - memset((void*)bottom, 1, top - bottom); - } else { - memset((void*)top, 1, bottom - top); - } - } - printf("%d\n", sum); - return sum; - } - ''' - self.do_run(src, '''setjmp of 10 -going -setjmp of 5 -going -back -back -setjmp of 10 -going -setjmp of 5 -going -back -back -12 -''') def test_longjmp_exc(self): src = r''' |