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