aboutsummaryrefslogtreecommitdiff
path: root/tests/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/runner.py')
-rwxr-xr-xtests/runner.py94
1 files changed, 86 insertions, 8 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 77f54bfd..f7a0fa26 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -3254,7 +3254,7 @@ Exiting setjmp function, level: 0, prev_jmp: -1
''')
self.emcc_args += ['--pre-js', 'pre.js']
- self.do_run(src, '''reported\nExit Status: 1\npostRun\nok.\n''')
+ self.do_run(src, '''reported\nexit(1) called\nExit Status: 1\npostRun\nok.\n''')
def test_class(self):
src = '''
@@ -3719,6 +3719,82 @@ Exiting setjmp function, level: 0, prev_jmp: -1
Settings.TOTAL_STACK = 1024
self.do_run(src, 'ok!')
+ def test_stack_varargs2(self):
+ if self.emcc_args is None: return # too slow in other modes
+ Settings.TOTAL_STACK = 1024
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ void func(int i) {
+ }
+ int main() {
+ for (int i = 0; i < 1024; i++) {
+ printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
+ i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i);
+ }
+ printf("ok!\n");
+ return 0;
+ }
+ '''
+ self.do_run(src, 'ok!')
+
+ print 'with return'
+
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+
+ int main() {
+ for (int i = 0; i < 1024; i++) {
+ int j = printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
+ i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i);
+ printf(" (%d)\n", j);
+ }
+ printf("ok!\n");
+ return 0;
+ }
+ '''
+ self.do_run(src, 'ok!')
+
+ print 'with definitely no return'
+
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stdarg.h>
+
+ void vary(const char *s, ...)
+ {
+ va_list v;
+ va_start(v, s);
+ char d[20];
+ vsnprintf(d, 20, s, v);
+ puts(d);
+
+ // Try it with copying
+ va_list tempva;
+ va_copy(tempva, v);
+ vsnprintf(d, 20, s, tempva);
+ puts(d);
+
+ va_end(v);
+ }
+
+ int main() {
+ for (int i = 0; i < 1024; i++) {
+ int j = printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
+ i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i);
+ printf(" (%d)\n", j);
+ vary("*cheez: %d+%d*", 99, 24);
+ vary("*albeit*");
+ }
+ printf("ok!\n");
+ return 0;
+ }
+ '''
+ self.do_run(src, 'ok!')
+
def test_stack_void(self):
Settings.INLINING_LIMIT = 50
@@ -10236,6 +10312,7 @@ def process(filename):
Settings.CORRECT_SIGNS = 0
def test_exit_status(self):
+ if self.emcc_args is None: return self.skip('need emcc')
src = r'''
#include <stdio.h>
#include <stdlib.h>
@@ -10251,12 +10328,12 @@ def process(filename):
'''
open('post.js', 'w').write('''
Module.addOnExit(function () {
- Module.print('Exit Status: ' + EXITSTATUS);
+ Module.print('I see exit status: ' + EXITSTATUS);
});
Module.callMain();
''')
self.emcc_args += ['-s', 'INVOKE_RUN=0', '--post-js', 'post.js']
- self.do_run(src, 'hello, world!\ncleanup\nExit Status: 118')
+ self.do_run(src, 'hello, world!\nexit(118) called\ncleanup\nI see exit status: 118')
def test_gc(self):
if self.emcc_args == None: return self.skip('needs ta2')
@@ -10682,6 +10759,7 @@ Options that are modified or new in %s include:
(['-O2', '--closure', '1'], lambda generated: 'function intArrayToString' not in generated, 'closure minifies the shell'),
(['-O2'], lambda generated: 'var b=0' in generated and not 'function _main' in generated, 'registerize/minify is run by default in -O2'),
(['-O2', '--minify', '0'], lambda generated: 'var b = 0' in generated and not 'function _main' in generated, 'minify is cancelled, but not registerize'),
+ (['-O2', '--js-opts', '0'], lambda generated: 'var b=0' not in generated and 'var b = 0' not in generated and 'function _main' in generated, 'js opts are cancelled'),
(['-O2', '-g'], lambda generated: 'var b=0' not in generated and 'var b = 0' not in generated and 'function _main' in generated, 'registerize/minify is cancelled by -g'),
(['-O2', '-g0'], lambda generated: 'var b=0' in generated and not 'function _main' in generated, 'registerize/minify is run by default in -O2 -g0'),
(['-O2', '-g1'], lambda generated: 'var b = 0' in generated and not 'function _main' in generated, 'compress is cancelled by -g1'),
@@ -11301,11 +11379,11 @@ f.close()
([], {
100: (190, 250),
250: (200, 330),
- 500: (250, 310),
- 1000: (230, 300),
- 2000: (380, 450),
- 5000: (800, 1100),
- 0: (1500, 1800)
+ 500: (250, 500),
+ 1000: (230, 1000),
+ 2000: (380, 2000),
+ 5000: (800, 5000),
+ 0: (1500, 5000)
}),
(['-O2'], {
100: (0, 1500),