test.py revision 77ed6142daed1e068fbda64405d0de9845e40e1
177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#
277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Test the bcc compiler
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoimport unittest
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoimport subprocess
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoimport os
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoimport sys
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaogArmInitialized = False
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaogUseArm = True
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaogUseX86 = True
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaogRunOTCCOutput = True
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef parseArgv():
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    global gUseArm
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    global gUseX86
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    global gRunOTCCOutput
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    for arg in sys.argv[1:]:
2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if arg == "--noarm":
2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "--noarm: not testing ARM"
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            gUseArm = False
2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        elif arg == "--nox86":
2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "--nox86: not testing x86"
2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            gUseX86 = False
2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        elif arg == "--norunotcc":
2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "--norunotcc detected, not running OTCC output"
2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            gRunOTCCOutput = False
2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        else:
3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "Unknown parameter: ", arg
3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            raise "Unknown parameter"
3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    sys.argv = sys.argv[0:1]
3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef compile(args):
3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    proc = subprocess.Popen(["../libbcc_driver"] + args, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    result = proc.communicate()
3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return result
3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef runCmd(args):
4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    result = proc.communicate()
4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return result[0].strip()
4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef uname():
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return runCmd(["uname"])
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef unameM():
4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return runCmd(["uname", "-m"])
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef which(item):
5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return runCmd(["which", item])
5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef fileType(item):
5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return runCmd(["file", item])
5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef outputCanRun():
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    ft = fileType(which("bcc"))
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return ft.find("ELF 32-bit LSB executable, Intel 80386") >= 0
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef checkEnvironment():
6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    global gRunOTCCOutput
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    gRunOTCCOutput = uname() == "Linux" and unameM() != "x86_64" and outputCanRun()
6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef adb(args):
6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return runCmd(["adb"] + args)
6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef setupArm():
6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    global gArmInitialized
6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if gArmInitialized:
7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return
7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    print "Setting up arm"
7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["remount"])
7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["shell", "rm", "/system/bin/bcc"])
7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["shell", "mkdir", "/system/bin/bccdata"])
7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["shell", "mkdir", "/system/bin/bccdata/data"])
7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    # Clear out old data TODO: handle recursion
7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["shell", "rm", "/system/bin/bccdata/data/*"])
7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    # Copy over data
7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    for root, dirs, files in os.walk("data"):
8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        for d in dirs:
8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            adb(["shell", "mkdir", os.path.join(root, d)])
8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        for f in files:
8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            adb(["push", os.path.join(root, f), os.path.join("/system/bin/bccdata", root, f)])
8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    # Copy over compiler
8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    adb(["sync"])
8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    gArmInitialized = True
8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef compileArm(args):
8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    setupArm()
9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    proc = subprocess.Popen(["adb", "shell", "/system/bin/bcc"] + args, stdout=subprocess.PIPE)
9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    result = proc.communicate()
9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return result[0].replace("\r","")
9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef compare(a, b):
9577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if a != b:
9677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        firstDiff = firstDifference(a, b)
9777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        print "Strings differ at character %d. Common: %s. Difference '%s' != '%s'" % (
9877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            firstDiff, a[0:firstDiff], safeAccess(a, firstDiff), safeAccess(b, firstDiff))
9977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef safeAccess(s, i):
10177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if 0 <= i < len(s):
10277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return s[i]
10377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    else:
10477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        return '?'
10577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
10677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef firstDifference(a, b):
10777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    commonLen = min(len(a), len(b))
10877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    for i in xrange(0, commonLen):
10977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if a[i] != b[i]:
11077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            return i
11177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return commonLen
11277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
11377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# a1 and a2 are the expected stdout and stderr.
11477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# b1 and b2 are the actual stdout and stderr.
11577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Compare the two, sets. Allow any individual line
11677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# to appear in either stdout or stderr. This is because
11777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# the way we obtain output on the ARM combines both
11877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# streams into one sequence.
11977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
12077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef compareOuput(a1,a2,b1,b2):
12177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    while True:
12277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        totalLen = len(a1) + len(a2) + len(b1) + len(b2)
12377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a1, b1 = matchCommon(a1, b1)
12477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a1, b2 = matchCommon(a1, b2)
12577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a2, b1 = matchCommon(a2, b1)
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a2, b2 = matchCommon(a2, b2)
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        newTotalLen = len(a1) + len(a2) + len(b1) + len(b2)
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if newTotalLen == 0:
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            return True
13077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if newTotalLen == totalLen:
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "Failed at %d %d %d %d" % (len(a1), len(a2), len(b1), len(b2))
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "a1", a1
13377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "a2", a2
13477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "b1", b1
13577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print "b2", b2
13677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            return False
13777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef matchCommon(a, b):
13977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    """Remove common items from the beginning of a and b,
14077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao       return just the tails that are different."""
14177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    while len(a) > 0 and len(b) > 0 and a[0] == b[0]:
14277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a = a[1:]
14377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        b = b[1:]
14477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return a, b
14577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef rewritePaths(args):
14777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return [rewritePath(x) for x in args]
14877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
14977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef rewritePath(p):
15077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    """Take a path that's correct on the x86 and convert to a path
15177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao       that's correct on ARM."""
15277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    if p.startswith("data/"):
15377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        p = "/system/bin/bccdata/" + p
15477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    return p
15577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoclass TestACC(unittest.TestCase):
15777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
15877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def checkResult(self, out, err, stdErrResult, stdOutResult=""):
15977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a1 = out.splitlines()
16077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        a2 = err.splitlines()
16177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        b2 = stdErrResult.splitlines()
16277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        b1 = stdOutResult.splitlines()
16377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.assertEqual(True, compareOuput(a1,a2,b1,b2))
16477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
16577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def compileCheck(self, args, stdErrResult, stdOutResult="",
16677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                     targets=['arm', 'x86']):
16777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        global gUseArm
16877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        global gUseX86
16977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        targetSet = frozenset(targets)
17077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if gUseX86 and 'x86' in targetSet:
17177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            print args
17277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            out, err = compile(args)
17377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            self.checkResult(out, err, stdErrResult, stdOutResult)
17477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if gUseArm and 'arm' in targetSet:
17577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            out = compileArm(rewritePaths(args))
17677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            self.checkResult(out, "", stdErrResult, stdOutResult)
17777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
17877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def compileCheckArm(self, args, result):
17977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.assertEqual(compileArm(args), result)
18077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
18177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testCompileReturnVal(self):
18277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["data/returnval-ansi.bc"], "")
18377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
18477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testCompileOTCCANSII(self):
18577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["data/otcc-ansi.bc"], "", "", ['x86'])
18677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
18777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunReturnVal(self):
18877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/returnval-ansi.bc"],
18977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        "Executing compiled code:\nresult: 42\n")
19077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
19177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testStringLiteralConcatenation(self):
19277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/testStringConcat.bc"],
19377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        "Executing compiled code:\nresult: 13\n", "Hello, world\n")
19477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
19577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunOTCCANSI(self):
19677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        global gRunOTCCOutput
19777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if gRunOTCCOutput:
19877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            self.compileCheck(["-R", "data/otcc-ansi.bc", "data/returnval.c"],
19977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                "Executing compiled code:\notcc-ansi.c: About to execute compiled code:\natcc-ansi.c: result: 42\nresult: 42\n", "",
20077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                 ['x86'])
20177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
20277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunOTCCANSI2(self):
20377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        global gRunOTCCOutput
20477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        if gRunOTCCOutput:
20577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            self.compileCheck(["-R", "data/otcc-ansi.bc", "data/otcc.c", "data/returnval.c"],
20677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao                "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'])
20777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
20877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunConstants(self):
20977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/constants.bc"],
21077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            "Executing compiled code:\nresult: 0\n",
21177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            "0 = 0\n010 = 8\n0x10 = 16\n'\\a' = 7\n'\\b' = 8\n'\\f' = 12\n'\\n' = 10\n'\\r' = 13\n'\\t' = 9\n'\\v' = 11\n'\\\\' = 92\n'\\'' = 39\n" +
21277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            "'\\\"' = 34\n'\\?' = 63\n'\\0' = 0\n'\\1' = 1\n'\\12' = 10\n'\\123' = 83\n'\\x0' = 0\n'\\x1' = 1\n'\\x12' = 18\n'\\x123' = 35\n'\\x1f' = 31\n'\\x1F' = 31\n")
21377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
21477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunFloat(self):
21577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/float.bc"],
21677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            "Executing compiled code:\nresult: 0\n",
21777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            """Constants: 0 0 0 0.01 0.01 0.1 10 10 0.1
21877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint: 1 float: 2.2 double: 3.3
21977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao ftoi(1.4f)=1
22077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao dtoi(2.4)=2
22177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao itof(3)=3
22277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao itod(4)=4
22377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoglobals: 1 2 3 4
22477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoargs: 1 2 3 4
22577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaolocals: 1 2 3 4
22677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaocast rval: 2 4
22777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaocast lval: 1.1 2 3.3 4
22877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
22977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
23077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRunFlops(self):
23177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/flops.bc"],
23277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            """Executing compiled code:
23377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""",
23477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao"""-1.1 = -1.1
23577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao!1.2 = 0
23677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao!0 = 1
23777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op double:
23877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 + 2 = 3
23977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 - 2 = -1
24077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 * 2 = 2
24177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 / 2 = 0.5
24277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaofloat op float:
24377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 + 2 = 3
24477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 - 2 = -1
24577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 * 2 = 2
24677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 / 2 = 0.5
24777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op float:
24877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 + 2 = 3
24977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 - 2 = -1
25077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 * 2 = 2
25177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 / 2 = 0.5
25277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op int:
25377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 + 2 = 3
25477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 - 2 = -1
25577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 * 2 = 2
25677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 / 2 = 0.5
25777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint op double:
25877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 + 2 = 3
25977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 - 2 = -1
26077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 * 2 = 2
26177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 / 2 = 0.5
26277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op double:
26377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 2: < 1   <= 1   == 0   >= 0   > 0   != 1
26477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 1: < 0   <= 1   == 1   >= 1   > 0   != 0
26577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2 op 1: < 0   <= 0   == 0   >= 1   > 1   != 1
26677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op float:
26777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 2: < 1   <= 1   == 0   >= 0   > 0   != 1
26877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 1: < 0   <= 1   == 1   >= 1   > 0   != 0
26977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2 op 1: < 0   <= 0   == 0   >= 1   > 1   != 1
27077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaofloat op float:
27177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 2: < 1   <= 1   == 0   >= 0   > 0   != 1
27277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 1: < 0   <= 1   == 1   >= 1   > 0   != 0
27377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2 op 1: < 0   <= 0   == 0   >= 1   > 1   != 1
27477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint op double:
27577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 2: < 1   <= 1   == 0   >= 0   > 0   != 1
27677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 1: < 0   <= 1   == 1   >= 1   > 0   != 0
27777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2 op 1: < 0   <= 0   == 0   >= 1   > 1   != 1
27877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodouble op int:
27977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 2: < 1   <= 1   == 0   >= 0   > 0   != 1
28077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1 op 1: < 0   <= 1   == 1   >= 1   > 0   != 0
28177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2 op 1: < 0   <= 0   == 0   >= 1   > 1   != 1
28277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaobranching: 1 0 1
28377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassi: 1 2 3 4 5 6 7 8 9 10 11 12
28477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassf: 1 2 3 4 5 6 7 8 9 10 11 12
28577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassd: 1 2 3 4 5 6 7 8 9 10 11 12
28677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassi: 1 2 3 4 5 6 7 8 9 10 11 12
28777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassf: 1 2 3 4 5 6 7 8 9 10 11 12
28877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassd: 1 2 3 4 5 6 7 8 9 10 11 12
28977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassi: 1 2 3 4 5 6 7 8 9 10 11 12
29077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassf: 1 2 3 4 5 6 7 8 9 10 11 12
29177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassd: 1 2 3 4 5 6 7 8 9 10 11 12
29277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotestpassidf: 1 2 3
29377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
29477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testCasts(self):
29577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/casts.bc"],
29677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao            """Executing compiled code:
29777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """Reading from a pointer: 3 3
29877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoWriting to a pointer: 4
29977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting casts: 3 3 4.5 4
30077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting reading (int*): 4
30177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting writing (int*): 8 9
30277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting reading (char*): 0x78 0x56 0x34 0x12
30377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting writing (char*): 0x87654321
30477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaof(10)
30577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoFunction pointer result: 70
30677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting read/write (float*): 8.8 9.9
30777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTesting read/write (double*): 8.8 9.9
30877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
30977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
31077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testChar(self):
31177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/char.bc"], """Executing compiled code:
31277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """a = 99, b = 41
31377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoga = 100, gb = 44""")
31477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
31577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testPointerArithmetic(self):
31677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/pointers.bc"], """Executing compiled code:
31777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """Pointer difference: 1 4
31877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoPointer addition: 2
31977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoPointer comparison to zero: 0 0 1
32077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoPointer comparison: 1 0 0 0 1
32177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
32277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testRollo3(self):
32377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/rollo3.bc"], """Executing compiled code:
32477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 10""", """""")
32577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
32677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testFloatDouble(self):
32777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/floatdouble.bc"], """Executing compiled code:
32877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """0.002 0.1 10""")
32977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
33077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testIncDec(self):
33177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/inc.bc"], """Executing compiled code:
33277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao0
33377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
33477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2
33577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
33677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
33777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2
33877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
33977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao0
34077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0
34177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
34277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
34377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testIops(self):
34477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/iops.bc"], """Executing compiled code:
34577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """Literals: 1 -1
34677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao++
34777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao0
34877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
34977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2
35077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao3
35177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao4
35277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao5
35377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao6
35477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao7
35577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao8
35677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao9
35777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao--
35877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao10
35977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao9
36077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao8
36177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao7
36277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao6
36377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao5
36477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao4
36577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao3
36677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2
36777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao1
36877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao0
36977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
37077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
37177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testFilm(self):
37277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/film.bc"], """Executing compiled code:
37377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """testing...
37477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoTotal bad: 0
37577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
37677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
37777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testpointers2(self):
37877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/pointers2.bc"], """Executing compiled code:
37977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """a = 0, *pa = 0
38077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 2, *pa = 2
38177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 0, *pa = 0 **ppa = 0
38277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 2, *pa = 2 **ppa = 2
38377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 0, *pa = 0 **ppa = 0
38477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 2, *pa = 2 **ppa = 2
38577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
38677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
38777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testassignmentop(self):
38877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/assignmentop.bc"], """Executing compiled code:
38977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """2 *= 5  10
39077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao20 /= 5  4
39177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17 %= 5  2
39277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17 += 5  22
39377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17 -= 5  12
39477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17<<= 1  34
39577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17>>= 1  8
39677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17&= 1  1
39777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao17^= 1  16
39877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao16|= 1  17
39977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao*f() = *f() + 10;
40077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaof()
40177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaof()
40277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 10
40377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao*f() += 10;
40477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaof()
40577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoa = 10
40677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
40777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
40877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testcomma(self):
40977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/comma.bc"], """Executing compiled code:
41077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0""", """statement: 10
41177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoif: a = 0
41277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaowhile: b = 11
41377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaofor: b = 22
41477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoreturn: 30
41577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoarg: 12
41677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""")
41777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
41877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testBrackets(self):
41977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/brackets.bc"], """Executing compiled code:
42077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoErrors: 0
42177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao2D Errors: 0
42277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0
42377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
42477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
42577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testShort(self):
42677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/short.bc"], """Executing compiled code:
42777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: -2
42877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
42977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
43077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testAssignment(self):
43177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/assignment.bc"], """Executing compiled code:
43277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 7
43377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
43477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
43577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testArray(self):
43677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/array.bc"], """Executing compiled code:
43777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaolocalInt: 3
43877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaolocalDouble: 3 3
43977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoglobalChar: 3
44077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoglobalDouble: 3
44177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestArgs: 0 2 4
44277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestDecay: Hi!
44377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaotest2D:
44477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoabcdefghijklmnopabcd
44577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefghijklmnopabcdefg
44677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoghijklmnopabcdefghij
44777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaojklmnopabcdefghijklm
44877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaomnopabcdefghijklmnop
44977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaopabcdefghijklmnopabc
45077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaocdefghijklmnopabcdef
45177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaofghijklmnopabcdefghi
45277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoijklmnopabcdefghijkl
45377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaolmnopabcdefghijklmno
45477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0
45577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
45677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
45777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testDefines(self):
45877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/defines.bc"], """Executing compiled code:
45977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 3
46077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
46177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
46277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testFuncArgs(self):
46377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/funcargs.bc"], """Executing compiled code:
46477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 4
46577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
46677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
46777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testB2071670(self):
46877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/b2071670.bc"], """Executing compiled code:
46977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 1092616192
47077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
47177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
47277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testStructs(self):
47377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/structs.bc"], """Executing compiled code:
47477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestCopying: 37 == 37
47577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestUnion: 1 == 0x3f800000
47677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestArgs: (6, 8, 10, 12)
47777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 6
47877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
47977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
48077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    def testAddressOf(self):
48177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao        self.compileCheck(["-R", "data/addressOf.bc"], """Executing compiled code:
48277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestStruct: 10 10 10
48377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaotestArray: 1 1 1
48477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoresult: 0
48577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao""","""""")
48677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
48777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodef main():
48877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    checkEnvironment()
48977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    parseArgv()
49077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    unittest.main()
49177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
49277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoif __name__ == '__main__':
49377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao    main()
49477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
495