summaryrefslogtreecommitdiff
path: root/testsuite/driver/testlib.py
diff options
context:
space:
mode:
authorIavor S. Diatchki <iavor.diatchki@gmail.com>2014-07-19 14:29:57 -0700
committerIavor S. Diatchki <iavor.diatchki@gmail.com>2014-07-19 14:29:57 -0700
commit524634641c61ab42c555452f6f87119b27f6c331 (patch)
treef78d17bb6b09fb3b2e22cb4d93c2a3d45accc2d9 /testsuite/driver/testlib.py
parent79ad1d20c5500e17ce5daaf93b171131669bddad (diff)
parentc41b716d82b1722f909979d02a76e21e9b68886c (diff)
downloadhaskell-wip/ext-solver.tar.gz
Merge branch 'master' into wip/ext-solverwip/ext-solver
Diffstat (limited to 'testsuite/driver/testlib.py')
-rw-r--r--testsuite/driver/testlib.py123
1 files changed, 17 insertions, 106 deletions
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 0657db83d3..126c8e4102 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -996,8 +996,6 @@ def compile_and_run__( name, way, top_mod, extra_mods, extra_hc_opts ):
if way == 'ghci': # interpreted...
return interpreter_run( name, way, extra_hc_opts, 0, top_mod )
- elif way == 'extcore' or way == 'optextcore' :
- return extcore_run( name, way, extra_hc_opts, 0, top_mod )
else: # compiled...
force = 0
if extra_mods:
@@ -1023,12 +1021,14 @@ def multi_compile_and_run( name, way, top_mod, extra_mods, extra_hc_opts ):
def stats( name, way, stats_file ):
opts = getTestOpts()
- return checkStats(stats_file, opts.stats_range_fields)
+ return checkStats(name, way, stats_file, opts.stats_range_fields)
# -----------------------------------------------------------------------------
# Check -t stats info
-def checkStats(stats_file, range_fields):
+def checkStats(name, way, stats_file, range_fields):
+ full_name = name + '(' + way + ')'
+
result = passed()
if len(range_fields) > 0:
f = open(in_testdir(stats_file))
@@ -1042,8 +1042,10 @@ def checkStats(stats_file, range_fields):
result = failBecause('no such stats field')
val = int(m.group(1))
- lowerBound = trunc( expected * ((100 - float(dev))/100));
- upperBound = trunc(0.5 + ceil(expected * ((100 + float(dev))/100)));
+ lowerBound = trunc( expected * ((100 - float(dev))/100))
+ upperBound = trunc(0.5 + ceil(expected * ((100 + float(dev))/100)))
+
+ deviation = round(((float(val) * 100)/ expected) - 100, 1)
if val < lowerBound:
print field, 'value is too low:'
@@ -1054,7 +1056,7 @@ def checkStats(stats_file, range_fields):
print field, 'value is too high:'
result = failBecause('stat not good enough')
- if val < lowerBound or val > upperBound:
+ if val < lowerBound or val > upperBound or config.verbose >= 4:
valStr = str(val)
valLen = len(valStr)
expectedStr = str(expected)
@@ -1062,10 +1064,12 @@ def checkStats(stats_file, range_fields):
length = max(map (lambda x : len(str(x)), [expected, lowerBound, upperBound, val]))
def display(descr, val, extra):
print descr, string.rjust(str(val), length), extra
- display(' Expected ' + field + ':', expected, '+/-' + str(dev) + '%')
- display(' Lower bound ' + field + ':', lowerBound, '')
- display(' Upper bound ' + field + ':', upperBound, '')
- display(' Actual ' + field + ':', val, '')
+ display(' Expected ' + full_name + ' ' + field + ':', expected, '+/-' + str(dev) + '%')
+ display(' Lower bound ' + full_name + ' ' + field + ':', lowerBound, '')
+ display(' Upper bound ' + full_name + ' ' + field + ':', upperBound, '')
+ display(' Actual ' + full_name + ' ' + field + ':', val, '')
+ if val != expected:
+ display(' Deviation ' + full_name + ' ' + field + ':', deviation, '%')
return result
@@ -1156,7 +1160,7 @@ def simple_build( name, way, extra_hc_opts, should_fail, top_mod, link, addsuf,
# ToDo: if the sub-shell was killed by ^C, then exit
- statsResult = checkStats(stats_file, opts.compiler_stats_range_fields)
+ statsResult = checkStats(name, way, stats_file, opts.compiler_stats_range_fields)
if badResult(statsResult):
return statsResult
@@ -1256,7 +1260,7 @@ def simple_run( name, way, prog, args ):
if check_prof and not check_prof_ok(name):
return failBecause('bad profile')
- return checkStats(stats_file, opts.stats_range_fields)
+ return checkStats(name, way, stats_file, opts.stats_range_fields)
def rts_flags(way):
if (way == ''):
@@ -1385,99 +1389,6 @@ def split_file(in_fn, delimiter, out1_fn, out2_fn):
out2.close()
# -----------------------------------------------------------------------------
-# Generate External Core for the given program, then compile the resulting Core
-# and compare its output to the expected output
-
-def extcore_run( name, way, extra_hc_opts, compile_only, top_mod ):
-
- depsfilename = qualify(name, 'deps')
- errname = add_suffix(name, 'comp.stderr')
- qerrname = qualify(errname,'')
-
- hcname = qualify(name, 'hc')
- oname = qualify(name, 'o')
-
- rm_no_fail( qerrname )
- rm_no_fail( qualify(name, '') )
-
- if (top_mod == ''):
- srcname = add_hs_lhs_suffix(name)
- else:
- srcname = top_mod
-
- qcorefilename = qualify(name, 'hcr')
- corefilename = add_suffix(name, 'hcr')
- rm_no_fail(qcorefilename)
-
- # Generate External Core
-
- if (top_mod == ''):
- to_do = ' ' + srcname + ' '
- else:
- to_do = ' --make ' + top_mod + ' '
-
- flags = copy.copy(getTestOpts().compiler_always_flags)
- if getTestOpts().outputdir != None:
- flags.extend(["-outputdir", getTestOpts().outputdir])
- cmd = 'cd ' + getTestOpts().testdir + " && '" \
- + config.compiler + "' " \
- + join(flags,' ') + ' ' \
- + join(config.way_flags(name)[way],' ') + ' ' \
- + extra_hc_opts + ' ' \
- + getTestOpts().extra_hc_opts \
- + to_do \
- + '>' + errname + ' 2>&1'
- result = runCmdFor(name, cmd)
-
- exit_code = result >> 8
-
- if exit_code != 0:
- if_verbose(1,'Compiling to External Core failed (status ' + `result` + ') errors were:')
- if_verbose_dump(1,qerrname)
- return failBecause('ext core exit code non-0')
-
- # Compile the resulting files -- if there's more than one module, we need to read the output
- # of the previous compilation in order to find the dependencies
- if (top_mod == ''):
- to_compile = corefilename
- else:
- result = runCmdFor(name, 'grep Compiling ' + qerrname + ' | awk \'{print $4}\' > ' + depsfilename)
- deps = open(depsfilename).read()
- deplist = string.replace(deps, '\n',' ');
- deplist2 = string.replace(deplist,'.lhs,', '.hcr');
- to_compile = string.replace(deplist2,'.hs,', '.hcr');
-
- flags = join(filter(lambda f: f != '-fext-core',config.way_flags(name)[way]),' ')
- if getTestOpts().outputdir != None:
- flags.extend(["-outputdir", getTestOpts().outputdir])
-
- cmd = 'cd ' + getTestOpts().testdir + " && '" \
- + config.compiler + "' " \
- + join(getTestOpts().compiler_always_flags,' ') + ' ' \
- + to_compile + ' ' \
- + extra_hc_opts + ' ' \
- + getTestOpts().extra_hc_opts + ' ' \
- + flags \
- + ' -fglasgow-exts -o ' + name \
- + '>' + errname + ' 2>&1'
-
- result = runCmdFor(name, cmd)
- exit_code = result >> 8
-
- if exit_code != 0:
- if_verbose(1,'Compiling External Core file(s) failed (status ' + `result` + ') errors were:')
- if_verbose_dump(1,qerrname)
- return failBecause('ext core exit code non-0')
-
- # Clean up
- rm_no_fail ( oname )
- rm_no_fail ( hcname )
- rm_no_fail ( qcorefilename )
- rm_no_fail ( depsfilename )
-
- return simple_run ( name, way, './'+name, getTestOpts().extra_run_opts )
-
-# -----------------------------------------------------------------------------
# Utils
def check_stdout_ok( name ):