Merge change 7047
* changes:
Run tests on both ARM and x86
diff --git a/libacc/tests/test.py b/libacc/tests/test.py
index ff9af9b..991c7de 100644
--- a/libacc/tests/test.py
+++ b/libacc/tests/test.py
@@ -4,6 +4,9 @@
import unittest
import subprocess
import os
+import sets
+
+gArmInitialized = False
def compile(args):
proc = subprocess.Popen(["acc"] + args, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
@@ -28,9 +31,8 @@
def adb(args):
return runCmd(["adb"] + args)
-gArmInitialized = False
-
def setupArm():
+ global gArmInitialized
if gArmInitialized:
return
print "Setting up arm"
@@ -48,7 +50,7 @@
adb(["push", os.path.join(root, f), os.path.join("/system/bin/accdata", root, f)])
# Copy over compiler
adb(["sync"])
- gArmInitialied = True
+ gArmInitialized = True
def compileArm(args):
setupArm()
@@ -75,23 +77,72 @@
return i
return commonLen
+def compareSet(a1,a2,b1,b2):
+ while True:
+ totalLen = len(a1) + len(a2) + len(b1) + len(b2)
+ a1, b1 = matchCommon(a1, b1)
+ a1, b2 = matchCommon(a1, b2)
+ a2, b1 = matchCommon(a2, b1)
+ a2, b2 = matchCommon(a2, b2)
+ newTotalLen = len(a1) + len(a2) + len(b1) + len(b2)
+ if newTotalLen == 0:
+ return True
+ if newTotalLen == totalLen:
+ print "Failed at %d %d %d %d" % (len(a1), len(a2), len(b1), len(b2))
+ print "a1", a1
+ print "a2", a2
+ print "b1", b1
+ print "b2", b2
+ return False
+
+def matchCommon(a, b):
+ while len(a) > 0 and len(b) > 0 and a[0] == b[0]:
+ a = a[1:]
+ b = b[1:]
+ return a, b
+
+def rewritePaths(args):
+ return [rewritePath(x) for x in args]
+
+def rewritePath(p):
+ if p.startswith("data/"):
+ p = "/system/bin/accdata/" + p
+ return p
+
class TestACC(unittest.TestCase):
- def compileCheck(self, args, stdErrResult, stdOutResult=""):
+ def compileCheckOld(self, args, stdErrResult, stdOutResult=""):
out, err = compile(args)
compare(out, stdOutResult)
compare(err, stdErrResult)
self.assertEqual(out, stdOutResult)
self.assertEqual(err, stdErrResult)
+ def checkResult(self, out, err, stdErrResult, stdOutResult=""):
+ a1 = out.splitlines()
+ a2 = err.splitlines()
+ b2 = stdErrResult.splitlines()
+ b1 = stdOutResult.splitlines()
+ self.assertEqual(True, compareSet(a1,a2,b1,b2))
+
+ def compileCheck(self, args, stdErrResult, stdOutResult="",
+ targets=['arm', 'x86']):
+ targetSet = sets.ImmutableSet(targets)
+ if 'x86' in targetSet:
+ out, err = compile(args)
+ self.checkResult(out, err, stdErrResult, stdOutResult)
+ if 'arm' in targetSet:
+ out = compileArm(rewritePaths(args))
+ self.checkResult(out, "", stdErrResult, stdOutResult)
+
def compileCheckArm(self, args, result):
self.assertEqual(compileArm(args), result)
def testCompileReturnVal(self):
self.compileCheck(["data/returnval-ansi.c"], "")
- def testCompileReturnVal(self):
- self.compileCheck(["data/otcc-ansi.c"], "")
+ def testCompileOTCCANSII(self):
+ self.compileCheck(["data/otcc-ansi.c"], "", "", ['x86'])
def testRunReturnVal(self):
self.compileCheck(["-R", "data/returnval-ansi.c"],
@@ -103,11 +154,12 @@
def testRunOTCCANSI(self):
self.compileCheck(["-R", "data/otcc-ansi.c", "data/returnval.c"],
- "Executing compiled code:\notcc-ansi.c: About to execute compiled code:\natcc-ansi.c: result: 42\nresult: 42\n")
+ "Executing compiled code:\notcc-ansi.c: About to execute compiled code:\natcc-ansi.c: result: 42\nresult: 42\n", "",
+ ['x86'])
def testRunOTCCANSI2(self):
self.compileCheck(["-R", "data/otcc-ansi.c", "data/otcc.c", "data/returnval.c"],
- "Executing compiled code:\notcc-ansi.c: About to execute compiled code:\notcc.c: about to execute compiled code.\natcc-ansi.c: result: 42\nresult: 42\n")
+ "Executing compiled code:\notcc-ansi.c: About to execute compiled code:\notcc.c: about to execute compiled code.\natcc-ansi.c: result: 42\nresult: 42\n", "",['x86'])
def testRunConstants(self):
self.compileCheck(["-R", "data/constants.c"],
@@ -178,7 +230,7 @@
"testpassidf: 1 2 3\n"
)
- def testArmRunReturnVal(self):
+ def oldtestArmRunReturnVal(self):
self.compileCheckArm(["-R", "/system/bin/accdata/data/returnval-ansi.c"],
"Executing compiled code:\nresult: 42\n")