diff options
author | Joachim Breitner <mail@joachim-breitner.de> | 2014-10-28 11:21:49 +0100 |
---|---|---|
committer | Joachim Breitner <mail@joachim-breitner.de> | 2014-10-28 13:06:30 +0100 |
commit | 3d6422b20db918d1911dd52470a2dad04fd5e1bc (patch) | |
tree | 7a456a5609661174819882e838da2af8825bf835 /testsuite/driver | |
parent | 63918e6d7f048597ae8f61c6297a7b700630a819 (diff) | |
download | haskell-3d6422b20db918d1911dd52470a2dad04fd5e1bc.tar.gz |
testlib: Get rid of two_normalisers
And make normalise_fun polyvariadic. After all, this is untyped code, so
lets make use of it :-)
Diffstat (limited to 'testsuite/driver')
-rw-r--r-- | testsuite/driver/testlib.py | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py index 17dbc6b044..3093982336 100644 --- a/testsuite/driver/testlib.py +++ b/testsuite/driver/testlib.py @@ -16,6 +16,7 @@ import datetime import copy import glob from math import ceil, trunc +import collections have_subprocess = False try: @@ -493,39 +494,45 @@ def normalise_slashes( name, opts ): def normalise_exe( name, opts ): opts.extra_normaliser = normalise_exe_ -def normalise_fun( fun ): - return lambda name, opts, f=fun: _normalise_fun(name, opts, f) +def normalise_fun( *fs ): + return lambda name, opts: _normalise_fun(name, opts, fs) -def _normalise_fun( name, opts, f ): - opts.extra_normaliser = f +def _normalise_fun( name, opts, *fs ): + opts.extra_normaliser = join_normalisers(fs) -def normalise_errmsg_fun( fun ): - return lambda name, opts, f=fun: _normalise_errmsg_fun(name, opts, f) +def normalise_errmsg_fun( *fs ): + return lambda name, opts: _normalise_errmsg_fun(name, opts, fs) -def _normalise_errmsg_fun( name, opts, f ): - opts.extra_errmsg_normaliser = f - -def two_normalisers(f, g): - """ - See also `join_normalisers` for a n-ary version of `two_normalisers` - """ - return lambda x, f=f, g=g: f(g(x)) +def _normalise_errmsg_fun( name, opts, *fs ): + opts.extra_errmsg_normaliser = join_normalisers(fs) def join_normalisers(*a): """ - Compose functions, e.g. + Compose functions, flattening sequences. - join_normalisers(f1,f2,f3) + join_normalisers(f1,[f2,f3],f4) is the same as - lambda x: f1(f2(f3(x))) + lambda x: f1(f2(f3(f4(x)))) """ - assert all(callable(f) for f in a) + def flatten(l): + """ + Taken from http://stackoverflow.com/a/2158532/946226 + """ + for el in l: + if isinstance(el, collections.Iterable) and not isinstance(el, basestring): + for sub in flatten(el): + yield sub + else: + yield el + + a = flatten(a) fn = lambda x:x # identity function for f in a: + assert callable(f) fn = lambda x,f=f,fn=fn: fn(f(x)) return fn @@ -1055,7 +1062,7 @@ def compile_cmp_asm( name, way, extra_hc_opts ): (platform_specific, expected_asm_file) = platform_wordsize_qualify(namebase, 'asm') actual_asm_file = qualify(name, 's') - if not compare_outputs('asm', two_normalisers(normalise_errmsg, normalise_asm), \ + if not compare_outputs('asm', join_normalisers(normalise_errmsg, normalise_asm), \ expected_asm_file, actual_asm_file): return failBecause('asm mismatch') @@ -1492,14 +1499,14 @@ def check_stdout_ok( name ): else: return normalise_output(str) - two_norm = two_normalisers(norm, getTestOpts().extra_normaliser) + extra_norm = join_normalisers(norm, getTestOpts().extra_normaliser) check_stdout = getTestOpts().check_stdout if check_stdout: - return check_stdout(actual_stdout_file, two_norm) + return check_stdout(actual_stdout_file, extra_norm) return compare_outputs('stdout', \ - two_norm, \ + extra_norm, \ expected_stdout_file, actual_stdout_file) def dump_stdout( name ): @@ -1522,7 +1529,7 @@ def check_stderr_ok( name ): return normalise_errmsg(str) return compare_outputs('stderr', \ - two_normalisers(norm, getTestOpts().extra_errmsg_normaliser), \ + join_normalisers(norm, getTestOpts().extra_errmsg_normaliser), \ expected_stderr_file, actual_stderr_file) def dump_stderr( name ): @@ -1596,7 +1603,7 @@ def check_prof_ok(name): return True else: return compare_outputs('prof', \ - two_normalisers(normalise_whitespace,normalise_prof), \ + join_normalisers(normalise_whitespace,normalise_prof), \ expected_prof_file, prof_file) # Compare expected output to actual output, and optionally accept the |