aboutsummaryrefslogtreecommitdiff
path: root/tests/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/runner.py')
-rwxr-xr-xtests/runner.py185
1 files changed, 124 insertions, 61 deletions
diff --git a/tests/runner.py b/tests/runner.py
index ff16cbbe..afb71ad9 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -366,7 +366,7 @@ process(sys.argv[1])
print >> sys.stderr, '<load %s from cache> ' % cache_name,
generated_libs = []
for basename, contents in self.library_cache[cache_name]:
- bc_file = os.path.join(build_dir, basename)
+ bc_file = os.path.join(build_dir, cache_name + '_' + basename)
f = open(bc_file, 'wb')
f.write(contents)
f.close()
@@ -1179,6 +1179,53 @@ m_divisor is 1091269979
'''
self.do_run(src, 'Succeeded!')
+ def test_i64_varargs(self):
+ if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2')
+
+ src = r'''
+ #include <stdio.h>
+ #include <stdint.h>
+ #include <stdarg.h>
+
+ int64_t ccv_cache_generate_signature(char *msg, int len, int64_t sig_start, ...) {
+ if (sig_start < 10123)
+ printf("%s\n", msg+len);
+ va_list v;
+ va_start(v, sig_start);
+ if (sig_start > 1413)
+ printf("%d\n", va_arg(v, int));
+ else
+ printf("nada\n");
+ va_end(v);
+ return len*sig_start*(msg[0]+1);
+ }
+
+ int main(int argc, char **argv)
+ {
+ for (int i = 0; i < argc; i++) {
+ int64_t x;
+ if (i % 123123 == 0)
+ x = ccv_cache_generate_signature(argv[i], i+2, (int64_t)argc*argc, 54.111);
+ else
+ x = ccv_cache_generate_signature(argv[i], i+2, (int64_t)argc*argc, 13);
+ printf("%lld\n", x);
+ }
+ };
+ '''
+ self.do_run(src, '''in/this.program
+nada
+1536
+a
+nada
+5760
+fl
+nada
+6592
+sdfasdfasdf
+nada
+7840
+''', 'waka fleefl asdfasdfasdfasdf'.split(' '))
+
def test_i32_mul_precise(self):
if self.emcc_args == None: return self.skip('needs ta2')
@@ -12593,9 +12640,18 @@ elif 'benchmark' in str(sys.argv):
Building.COMPILER_TEST_OPTS = []
- TEST_REPS = 4
+ TEST_REPS = 2
TOTAL_TESTS = 8
+ # standard arguments for timing:
+ # 0: no runtime, just startup
+ # 1: very little runtime
+ # 2: 0.5 seconds
+ # 3: 1 second
+ # 4: 5 seconds
+ # 5: 10 seconds
+ DEFAULT_ARG = '4'
+
tests_done = 0
total_times = map(lambda x: 0., range(TOTAL_TESTS))
total_native_times = map(lambda x: 0., range(TOTAL_TESTS))
@@ -12633,15 +12689,9 @@ elif 'benchmark' in str(sys.argv):
print ' JavaScript: mean: %.3f (+-%.3f) secs median: %.3f range: %.3f-%.3f (noise: %3.3f%%) (%d runs)' % (mean, std, median, min(times), max(times), 100*std/mean, reps)
print ' Native : mean: %.3f (+-%.3f) secs median: %.3f range: %.3f-%.3f (noise: %3.3f%%) JS is %.2f X slower' % (mean_native, std_native, median_native, min(native_times), max(native_times), 100*std_native/mean_native, final)
- def do_benchmark(self, name, src, expected_output='FAIL', args=[], emcc_args=[], native_args=[], shared_args=[], force_c=False, reps=TEST_REPS):
- # standard arguments for timing:
- # 0: no runtime, just startup
- # 1: very little runtime
- # 2: 0.5 seconds
- # 3: 1 second
- # 4: 5 seconds
- # 5: 10 seconds
- args = args or ['3']
+ def do_benchmark(self, name, src, expected_output='FAIL', args=[], emcc_args=[], native_args=[], shared_args=[], force_c=False, reps=TEST_REPS, native_exec=None, output_parser=None, args_processor=None):
+ args = args or [DEFAULT_ARG]
+ if args_processor: args = args_processor(args)
dirname = self.get_dir()
filename = os.path.join(dirname, name + '.c' + ('' if force_c else 'pp'))
@@ -12671,7 +12721,10 @@ elif 'benchmark' in str(sys.argv):
if i == 0 and 'uccessfully compiled asm.js code' in js_output:
if 'asm.js link error' not in js_output:
print "[%s was asm.js'ified]" % name
- curr = time.time()-start
+ if not output_parser:
+ curr = time.time()-start
+ else:
+ curr = output_parser(js_output)
times.append(curr)
total_times[tests_done] += curr
if i == 0:
@@ -12679,7 +12732,11 @@ elif 'benchmark' in str(sys.argv):
self.assertContained(expected_output, js_output)
# Run natively
- self.build_native(filename, shared_args + native_args)
+ if not native_exec:
+ self.build_native(filename, shared_args + native_args)
+ else:
+ shutil.copyfile(native_exec, filename + '.native')
+ shutil.copymode(native_exec, filename + '.native')
global total_native_times
native_times = []
for i in range(reps):
@@ -12688,7 +12745,10 @@ elif 'benchmark' in str(sys.argv):
if i == 0:
# Sanity check on output
self.assertContained(expected_output, native_output)
- curr = time.time()-start
+ if not output_parser:
+ curr = time.time()-start
+ else:
+ curr = output_parser(native_output)
native_times.append(curr)
total_native_times[tests_done] += curr
@@ -12733,7 +12793,7 @@ elif 'benchmark' in str(sys.argv):
return 0;
}
'''
- self.do_benchmark('primes', src, 'lastprime: 3043739.')
+ self.do_benchmark('primes', src, 'lastprime:')
def test_memops(self):
src = '''
@@ -12766,7 +12826,7 @@ elif 'benchmark' in str(sys.argv):
return 0;
}
'''
- self.do_benchmark('memops', src, 'final: 400.')
+ self.do_benchmark('memops', src, 'final:')
def zzztest_files(self):
src = r'''
@@ -12863,7 +12923,7 @@ elif 'benchmark' in str(sys.argv):
return 0;
}
'''
- self.do_benchmark('copy', src, 'sum:2836\n')
+ self.do_benchmark('copy', src, 'sum:')
def test_fannkuch(self):
src = open(path_from_root('tests', 'fannkuch.cpp'), 'r').read().replace(
@@ -12883,7 +12943,7 @@ elif 'benchmark' in str(sys.argv):
'''
)
assert 'switch(arg)' in src
- self.do_benchmark('fannkuch', src, 'Pfannkuchen(11) = 51.')
+ self.do_benchmark('fannkuch', src, 'Pfannkuchen(')
def test_corrections(self):
src = r'''
@@ -12916,7 +12976,7 @@ elif 'benchmark' in str(sys.argv):
return 0;
}
'''
- self.do_benchmark('corrections', src, 'final: 40006013:10225.', emcc_args=['-s', 'CORRECT_SIGNS=1', '-s', 'CORRECT_OVERFLOWS=1', '-s', 'CORRECT_ROUNDINGS=1'])
+ self.do_benchmark('corrections', src, 'final:', emcc_args=['-s', 'CORRECT_SIGNS=1', '-s', 'CORRECT_OVERFLOWS=1', '-s', 'CORRECT_ROUNDINGS=1'])
def fasta(self, name, double_rep, emcc_args=[]):
src = open(path_from_root('tests', 'fasta.cpp'), 'r').read().replace('double', double_rep)
@@ -12934,7 +12994,7 @@ elif 'benchmark' in str(sys.argv):
}
''')
assert 'switch(arg)' in src
- self.do_benchmark('fasta', src, '''GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\nTCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\nAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\nGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\nCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\nGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\nGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\nTTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\nAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\nGCCTGGGCGA''')
+ self.do_benchmark('fasta', src, '')
def test_fasta_float(self):
self.fasta('fasta_float', 'float')
@@ -12951,59 +13011,62 @@ elif 'benchmark' in str(sys.argv):
def test_life(self):
src = open(path_from_root('tests', 'life.c'), 'r').read()
- self.do_benchmark('life', src, '''--------------------------------
- [][] [] []
- [][] [][] [] []
- [][] [] []
- [][] [] []
- [] [][] []
- [][] [] [] [] []
- [][] [] [] [] []
- [] [][] []
- [][] [][]
- [][] [][] [] []
- [][] [][] [][] []
- [][] []
- []
- []
- [] []
-[] [][][] [] []
- [] [][][][][][] [] [][]
- [] [][] [] [] [][] [] []
-[] [] [][] [] []
- [][] [] [][][] [][]
- [] [] [][][]
- [][] [][][][]
- [][] [][] []
- [] [][] []
- [][]
- [][] []
- [] [][][][][]
-[][][] [][]
- [][] [] [][][]
- [] [] [][]
- []
- [] [][] [][][]
---------------------------------''', shared_args=['-std=c99'], force_c=True)
-
- def test_nbody_java(self): # tests xmlvm compiled java, including bitcasts of doubles, i64 math, etc.
+ self.do_benchmark('life', src, '''--------------------------------''', shared_args=['-std=c99'], force_c=True)
+
+ def test_zzz_java_nbody(self): # tests xmlvm compiled java, including bitcasts of doubles, i64 math, etc.
args = [path_from_root('tests', 'nbody-java', x) for x in os.listdir(path_from_root('tests', 'nbody-java')) if x.endswith('.c')] + \
['-I' + path_from_root('tests', 'nbody-java')]
self.do_benchmark('nbody_java', '', '''Time(s)''',
force_c=True, emcc_args=args + ['-s', 'PRECISE_I64_MATH=1', '--llvm-lto', '0'], native_args=args + ['-lgc', '-std=c99', '-target', 'x86_64-pc-linux-gnu', '-lm'])
- def test_zlib(self):
+ def lua(self, benchmark, expected, output_parser=None, args_processor=None):
+ shutil.copyfile(path_from_root('tests', 'lua', benchmark + '.lua'), benchmark + '.lua')
+ #shutil.copyfile(path_from_root('tests', 'lua', 'binarytrees.lua'), 'binarytrees.lua')
+ #shutil.copyfile(path_from_root('tests', 'lua', 'scimark.lua'), 'scimark.lua')
+ emcc_args = self.get_library('lua', [os.path.join('src', 'lua'), os.path.join('src', 'liblua.a')], make=['make', 'generic'], configure=None) + \
+ ['--embed-file', benchmark + '.lua']
+ #['--embed-file', 'binarytrees.lua', '--embed-file', 'scimark.lua'] + ['--minify', '0']
+ shutil.copyfile(emcc_args[0], emcc_args[0] + '.bc')
+ emcc_args[0] += '.bc'
+ native_args = self.get_library('lua_native', [os.path.join('src', 'lua'), os.path.join('src', 'liblua.a')], make=['make', 'generic'], configure=None, native=True)
+
+ self.do_benchmark('lua_' + benchmark, '', expected,
+ force_c=True, args=[benchmark + '.lua'], emcc_args=emcc_args, native_args=native_args, native_exec=os.path.join('building', 'lua_native', 'src', 'lua'),
+ output_parser=output_parser, args_processor=args_processor)
+
+ def test_zzz_lua_scimark(self):
+ def output_parser(output):
+ return 1.0/float(re.search('\nSciMark +([\d\.]+) ', output).group(1))
+
+ self.lua('scimark', '[small problem sizes]', output_parser=output_parser)
+
+ def test_zzz_lua_binarytrees(self):
+ def args_processor(args):
+ arg = int(DEFAULT_ARG)
+ if arg == 0:
+ return args + ['0']
+ elif arg == 1:
+ return args + ['9.5']
+ elif arg == 2:
+ return args + ['11.99']
+ elif arg == 3:
+ return args + ['12.85']
+ elif arg == 4:
+ return args + ['14.72']
+ elif arg == 5:
+ return args + ['15.82']
+ self.lua('binarytrees', 'long lived tree of depth', args_processor=args_processor)
+
+ def test_zzz_zlib(self):
src = open(path_from_root('tests', 'zlib', 'benchmark.c'), 'r').read()
emcc_args = self.get_library('zlib', os.path.join('libz.a'), make_args=['libz.a']) + \
['-I' + path_from_root('tests', 'zlib')]
native_args = self.get_library('zlib_native', os.path.join('libz.a'), make_args=['libz.a'], native=True) + \
['-I' + path_from_root('tests', 'zlib')]
- self.do_benchmark('zlib', src, '''sizes: 100000,25906
-ok.
-''',
+ self.do_benchmark('zlib', src, '''ok.''',
force_c=True, emcc_args=emcc_args, native_args=native_args)
- def test_yyy_box2d(self): # Called thus so it runs late in the alphabetical cycle... it is long
+ def test_zzz_box2d(self): # Called thus so it runs late in the alphabetical cycle... it is long
src = open(path_from_root('tests', 'box2d', 'Benchmark.cpp'), 'r').read()
js_lib = self.get_library('box2d', [os.path.join('box2d.a')], configure=None)