aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-02-27 12:06:09 +0100
committerCyril SIX <cyril.six@kalray.eu>2019-02-27 12:06:09 +0100
commit3c72ae21ae10f3f3f379cc45ef145bc7d90feed7 (patch)
treef6225fd6bfeb4d83d635ad8bd9859f60b18edb9c /test/mppa
parent12f0b90362f079cb1386883fe2d87a7d6955faa3 (diff)
downloadcompcert-kvx-3c72ae21ae10f3f3f379cc45ef145bc7d90feed7.tar.gz
compcert-kvx-3c72ae21ae10f3f3f379cc45ef145bc7d90feed7.zip
Changing the way floats are compared (script using reltol and abstol comparison)
Diffstat (limited to 'test/mppa')
-rw-r--r--test/mppa/instr/Makefile5
-rwxr-xr-xtest/mppa/instr/floatcmp.py93
-rw-r--r--test/mppa/instr/fmulw.c2
-rw-r--r--test/mppa/instr/framework.h4
4 files changed, 99 insertions, 5 deletions
diff --git a/test/mppa/instr/Makefile b/test/mppa/instr/Makefile
index b4abb6a4..ea86114c 100644
--- a/test/mppa/instr/Makefile
+++ b/test/mppa/instr/Makefile
@@ -5,6 +5,7 @@ OPTIM ?= -O2
CFLAGS ?= $(OPTIM)
SIMU ?= k1-mppa
TIMEOUT ?= --signal=SIGTERM 120s
+DIFF ?= python2.7 floatcmp.py -reltol .00001
DIR=./
SRCDIR=$(DIR)
@@ -50,7 +51,7 @@ test: $(X86_GCC_OUT) $(GCC_OUT)
@for test in $(TESTNAMES); do\
x86out=$(OUTDIR)/$$test.x86-gcc.out;\
gccout=$(OUTDIR)/$$test.gcc.out;\
- if diff -q $$x86out $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ if $(DIFF) $$x86out $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
>&2 printf "$(RED)ERROR: $$x86out and $$gccout differ$(NC)\n";\
else\
printf "$(GREEN)GOOD: $$x86out and $$gccout concur$(NC)\n";\
@@ -63,7 +64,7 @@ check: $(GCC_OUT) $(CCOMP_OUT)
@for test in $(TESTNAMES); do\
gccout=$(OUTDIR)/$$test.gcc.out;\
ccompout=$(OUTDIR)/$$test.ccomp.out;\
- if diff -q $$ccompout $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ if $(DIFF) $$ccompout $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
>&2 printf "$(RED)ERROR: $$ccompout and $$gccout differ$(NC)\n";\
else\
printf "$(GREEN)GOOD: $$ccompout and $$gccout concur$(NC)\n";\
diff --git a/test/mppa/instr/floatcmp.py b/test/mppa/instr/floatcmp.py
new file mode 100755
index 00000000..49f1bc13
--- /dev/null
+++ b/test/mppa/instr/floatcmp.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python2.7
+
+import argparse as ap
+import sys
+
+parser = ap.ArgumentParser()
+parser.add_argument("file1", help="First file to compare")
+parser.add_argument("file2", help="Second file to compare")
+parser.add_argument("-reltol", help="Relative error")
+parser.add_argument("-abstol", help="Absolute error")
+parser.add_argument("-s", help="Silent output", action="store_true")
+args = parser.parse_args()
+
+reltol = float(args.reltol) if args.reltol else None
+abstol = float(args.abstol) if args.abstol else None
+silent = args.s
+
+if silent:
+ sys.stdout = open("/dev/null", "w")
+
+import re
+from math import fabs
+
+def floatcmp(f1, f2):
+ if abstol:
+ if fabs(f1 - f2) > abstol:
+ return False
+ if reltol:
+ if f2 != 0. and fabs((f1 - f2) / f2) > reltol:
+ return False
+ return True
+
+class Parsed(list):
+ def __eq__(self, other):
+ if len(self) != len(other):
+ return False
+ comps = zip(self, other)
+ for comp in comps:
+ if all(isinstance(compElt, str) for compElt in comp):
+ if comp[0] != comp[1]:
+ return False
+ elif all (isinstance(compElt, float) for compElt in comp):
+ if not floatcmp(comp[0], comp[1]):
+ return False
+ else:
+ return False
+ return True
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+parseLine = re.compile(r"\s*(\S+)")
+def readline(line):
+ words = parseLine.findall(line)
+ parsed = Parsed([])
+ for word in words:
+ try:
+ parse = float(word)
+ parsed.append(parse)
+ except ValueError:
+ parsed.append(word)
+ return parsed
+
+def readfile(filename):
+ L = []
+ try:
+ with open(filename) as f:
+ for line in f:
+ L.append(readline(line))
+ except IOError:
+ print "Unable to read {}".format(filename)
+ sys.exit(2)
+ return L
+
+L1 = readfile(args.file1)
+L2 = readfile(args.file2)
+
+if len(L1) != len(L2):
+ print "The files have different amount of lines"
+ print "\t{}: {} lines".format(args.file1, len(L1))
+ print "\t{}: {} lines".format(args.file2, len(L2))
+ sys.exit(1)
+
+cmpL = zip(L1, L2)
+for i, cmpElt in enumerate(cmpL):
+ if cmpElt[0] != cmpElt[1]:
+ print "The files differ at line {}".format(i)
+ print "\t{}: {}".format(args.file1, cmpElt[0])
+ print "\t{}: {}".format(args.file2, cmpElt[1])
+ sys.exit(1)
+
+print "Comparison succeeded"
+sys.exit(0)
diff --git a/test/mppa/instr/fmulw.c b/test/mppa/instr/fmulw.c
index 030a6d9c..67d645c3 100644
--- a/test/mppa/instr/fmulw.c
+++ b/test/mppa/instr/fmulw.c
@@ -4,4 +4,4 @@ BEGIN_TEST(double)
{
c = ((float)a * (float)b);
}
-END_TESTF64()
+END_TESTF32()
diff --git a/test/mppa/instr/framework.h b/test/mppa/instr/framework.h
index d4f36f6b..3bbfa271 100644
--- a/test/mppa/instr/framework.h
+++ b/test/mppa/instr/framework.h
@@ -46,7 +46,7 @@
/* END END_TEST32 */
#define END_TESTF32()\
- printf("%f\t%f\t%f\n", a, b, c);\
+ printf("%e\t%e\t%e\n", a, b, c);\
S += c;\
}\
return 0;\
@@ -54,7 +54,7 @@
/* END END_TESTF32 */
#define END_TESTF64()\
- printf("%lf\t%lf\t%lf\n", a, b, c);\
+ printf("%e\t%e\t%e\n", a, b, c);\
S += c;\
}\
return 0;\