diff options
Diffstat (limited to 'tests/test_core.py')
-rw-r--r-- | tests/test_core.py | 99 |
1 files changed, 55 insertions, 44 deletions
diff --git a/tests/test_core.py b/tests/test_core.py index 594350fb..55aeb697 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1288,20 +1288,15 @@ 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_exceptions_white_list(self): - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('todo in fastcomp') - Settings.DISABLE_EXCEPTION_CATCHING = 2 Settings.EXCEPTION_CATCHING_WHITELIST = ["__Z12somefunctionv"] Settings.INLINING_LIMIT = 50 # otherwise it is inlined and not identified test_path = path_from_root('tests', 'core', 'test_exceptions_white_list') src, output = (test_path + s for s in ('.in', '.out')) - self.do_run_from_file(src, output) def test_exceptions_white_list_2(self): - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('todo in fastcomp') - Settings.DISABLE_EXCEPTION_CATCHING = 2 Settings.EXCEPTION_CATCHING_WHITELIST = ["_main"] Settings.INLINING_LIMIT = 50 # otherwise it is inlined and not identified @@ -1485,7 +1480,6 @@ class T(RunnerCore): # Short name, to make it more fun to use manually on the co def test_segfault(self): if self.emcc_args is None: return self.skip('SAFE_HEAP without ta2 means we check types too, which hide segfaults') - if os.environ.get('EMCC_FAST_COMPILER') == '1' and '-O2' not in self.emcc_args: return self.skip('todo in non-jsopts-enabled fastcomp') Settings.SAFE_HEAP = 1 @@ -1898,8 +1892,6 @@ class T(RunnerCore): # Short name, to make it more fun to use manually on the co self.do_run_from_file(src, output, [], lambda x, err: x.replace('\n', '*')) def test_llvm_used(self): - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('pnacl kills llvm_used') - Building.LLVM_OPTS = 3 test_path = path_from_root('tests', 'core', 'test_llvm_used') @@ -1935,7 +1927,7 @@ def process(filename): def test_inlinejs(self): if not self.is_le32(): return self.skip('le32 needed for inline js') - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('todo in fastcomp') + if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('fastcomp only supports EM_ASM') test_path = path_from_root('tests', 'core', 'test_inlinejs') src, output = (test_path + s for s in ('.in', '.out')) @@ -1948,7 +1940,7 @@ def process(filename): def test_inlinejs2(self): if not self.is_le32(): return self.skip('le32 needed for inline js') - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('todo in fastcomp') + if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('fastcomp only supports EM_ASM') test_path = path_from_root('tests', 'core', 'test_inlinejs2') src, output = (test_path + s for s in ('.in', '.out')) @@ -2079,7 +2071,6 @@ def process(filename): def test_bigswitch(self): if self.run_name != 'default': return self.skip('TODO: issue #781') - src = open(path_from_root('tests', 'bigswitch.cpp')).read() self.do_run(src, '''34962: GL_ARRAY_BUFFER (0x8892) 26214: what? @@ -2544,8 +2535,6 @@ The current type of b is: 9 self.do_run_from_file(src, output) def test_intentional_fault(self): - if os.environ.get('EMCC_FAST_COMPILER') == '1' and self.run_name == 'default': return self.skip('todo in fastcomp in default') - # Some programs intentionally segfault themselves, we should compile that into a throw src = r''' int main () { @@ -2599,6 +2588,12 @@ The current type of b is: 9 self.do_run_from_file(src, output) + def test_memcpy3(self): + if Settings.USE_TYPED_ARRAYS != 2: return self.skip('need ta2') + test_path = path_from_root('tests', 'core', 'test_memcpy3') + src, output = (test_path + s for s in ('.c', '.out')) + self.do_run_from_file(src, output) + def test_getopt(self): if self.emcc_args is None: return self.skip('needs emcc for libc') @@ -3552,8 +3547,13 @@ ok def test_rand(self): src = r'''#include <stdlib.h> #include <stdio.h> +#include <assert.h> int main() { + // we need RAND_MAX to be a bitmask (power of 2 minus 1). this assertions guarantees + // if RAND_MAX changes the test failure will focus attention on that issue here. + assert(RAND_MAX == 0x7fffffff); + srand(0xdeadbeef); for(int i = 0; i < 10; ++i) printf("%d\n", rand()); @@ -3565,26 +3565,26 @@ int main() return 0; } ''' - expected = '''-73943336 --1417355489 --782256216 --810259121 + expected = '''2073540312 +730128159 +1365227432 +1337224527 792390264 --194827905 --1163489464 --164637777 --936909288 --667866145 --73943336 --1417355489 --782256216 --810259121 +1952655743 +983994184 +1982845871 +1210574360 +1479617503 +2073540312 +730128159 +1365227432 +1337224527 792390264 --194827905 --1163489464 --164637777 --936909288 --667866145 +1952655743 +983994184 +1982845871 +1210574360 +1479617503 ''' self.do_run(src, expected) @@ -3853,7 +3853,6 @@ Pass: 0.000012 0.000012''') def test_sscanf_6(self): test_path = path_from_root('tests', 'core', 'test_sscanf_6') src, output = (test_path + s for s in ('.in', '.out')) - self.do_run_from_file(src, output) def test_sscanf_skip(self): @@ -3958,6 +3957,10 @@ def process(filename): ''' self.do_run(src, ('got: 35\ngot: 45\ngot: 25\ngot: 15\nisatty? 0,0,1\n', 'isatty? 0,0,1\ngot: 35\ngot: 45\ngot: 25\ngot: 15\n'), post_build=post) + def test_mount(self): + src = open(path_from_root('tests', 'fs', 'test_mount.c'), 'r').read() + self.do_run(src, 'success', force_c=True) + def test_fwrite_0(self): test_path = path_from_root('tests', 'core', 'test_fwrite_0') src, output = (test_path + s for s in ('.in', '.out')) @@ -4644,7 +4647,16 @@ return malloc(size); self.do_run(path_from_root('tests', 'cubescript'), '*\nTemp is 33\n9\n5\nhello, everyone\n*', main_file='command.cpp') - if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('skipping extra parts in fastcomp') + assert 'asm1' in test_modes + if self.run_name == 'asm1': + print 'verifing postsets' + generated = open('src.cpp.o.js').read() + generated = re.sub(r'\n+[ \n]*\n+', '\n', generated) + main = generated[generated.find('function runPostSets'):] + main = main[:main.find('\n}')] + assert main.count('\n') <= 7, ('must not emit too many postSets: %d' % main.count('\n')) + ' : ' + main + + if os.environ.get('EMCC_FAST_COMPILER') == '1': return self.skip('fastcomp always aliases pointers') assert 'asm2g' in test_modes if self.run_name == 'asm2g': @@ -4663,14 +4675,6 @@ return malloc(size); assert ' & 255]()' not in original, 'big function table does not exist' assert ' & 255]()' in final, 'big function table exists' - assert 'asm1' in test_modes - if self.run_name == 'asm1': - generated = open('src.cpp.o.js').read() - generated = re.sub(r'\n+[ \n]*\n+', '\n', generated) - main = generated[generated.find('function runPostSets'):] - main = main[:main.find('\n}')] - assert main.count('\n') == 7, 'must not emit too many postSets: %d' % main.count('\n') - def test_simd(self): if Settings.USE_TYPED_ARRAYS != 2: return self.skip('needs ta2') if Settings.ASM_JS: Settings.ASM_JS = 2 # does not validate @@ -4700,7 +4704,7 @@ return malloc(size); self.do_run_from_file(src, output) def test_gcc_unmangler(self): - if os.environ.get('EMCC_FAST_COMPILER') != '1': Settings.NAMED_GLOBALS = 1 # test coverage for this + if os.environ.get('EMCC_FAST_COMPILER') != '1': Settings.NAMED_GLOBALS = 1 # test coverage for this; fastcomp never names globals Building.COMPILER_TEST_OPTS += ['-I' + path_from_root('third_party')] @@ -5101,7 +5105,7 @@ def process(filename): shortname = name.replace('.ll', '') if '' not in shortname: continue if os.environ.get('EMCC_FAST_COMPILER') == '1' and os.path.basename(shortname) in [ - 'structparam', 'uadd_overflow_ta2', 'extendedprecision', 'issue_39', 'emptystruct', 'phinonexist', 'quotedlabel', 'oob_ta2', 'phientryimplicit', 'phiself', 'invokebitcast', # invalid ir + 'structparam', 'extendedprecision', 'issue_39', 'emptystruct', 'phinonexist', 'quotedlabel', 'oob_ta2', 'phientryimplicit', 'phiself', 'invokebitcast', 'funcptr', # invalid ir 'structphiparam', 'callwithstructural_ta2', 'callwithstructural64_ta2', 'structinparam', # pnacl limitations in ExpandStructRegs '2xi40', # pnacl limitations in ExpandGetElementPtr 'legalizer_ta2', # pnacl limitation in not legalizing i104, i96, etc. @@ -6163,7 +6167,9 @@ def process(filename): self.build(src, dirname, os.path.join(dirname, 'src.cpp'), post_build=(None, post)) def test_emscripten_log(self): - self.banned_js_engines = [SPIDERMONKEY_ENGINE] # XXX, emscripten_log is broken in spidermonkey currently, issue #1970 + if Settings.ASM_JS: + # XXX Does not work in SpiderMonkey since callstacks cannot be captured when running in asm.js, see https://bugzilla.mozilla.org/show_bug.cgi?id=947996 + self.banned_js_engines = [SPIDERMONKEY_ENGINE] if self.emcc_args is None: return self.skip('This test needs libc.') if '-g' not in Building.COMPILER_TEST_OPTS: Building.COMPILER_TEST_OPTS.append('-g') self.do_run('#define RUN_FROM_JS_SHELL\n' + open(path_from_root('tests', 'emscripten_log', 'emscripten_log.cpp')).read(), "Success!") @@ -6367,6 +6373,11 @@ def process(filename): self.do_run_from_file(src, output) + def test_minmax(self): + if self.emcc_args == None: return self.skip('needs emcc') + if os.environ.get('EMCC_FAST_COMPILER') != '1': return self.skip('this test will not pass in the old compiler') + self.do_run(open(path_from_root('tests', 'test_minmax.c')).read(), 'NAN != NAN\nSuccess!') + # Generate tests for everything def make_run(fullname, name=-1, compiler=-1, embetter=0, quantum_size=0, typed_arrays=0, emcc_args=None, env=None): |