Mercurial > lcfOS
view test/testsamples.py @ 373:fc1b89b09896
Added run test.py
author | Windel Bouwman |
---|---|
date | Fri, 21 Mar 2014 14:32:54 +0100 |
parents | 68841f9ab96c |
children | 72a3b646d543 |
line wrap: on
line source
import unittest import os import io from testemulation import runQemu from testzcc import relpath from ppci.tasks import TaskRunner from ppci.buildtasks import Assemble, Compile, Link from ppci.objectfile import ObjectFile startercode = """ mov sp, 0x30000 ; setup stack pointer BL sample_start ; Branch to sample start local_loop: B local_loop """ class Samples: def testPrint(self): snippet = """ module sample; import io; function void start() { io.print("Hello world"); } """ self.do(snippet, "Hello world") def testForLoopPrint(self): snippet = """ module sample; import io; function void start() { var int i; for (i=0; i<10; i = i + 1) { io.print2("A = ", i); } } """ res = "".join("A = 0x{0:08X}\n".format(a) for a in range(10)) self.do(snippet, res) def testParameterPassing4(self): snippet = """ module sample; import io; function void dump(int a, int b, int c, int d) { io.print2("a=", a); io.print2("b=", b); io.print2("c=", c); io.print2("d=", d); } function void start() { dump(4,55,66,0x1337); } """ res = "a=0x{0:08X}\n".format(4) res += "b=0x{0:08X}\n".format(55) res += "c=0x{0:08X}\n".format(66) res += "d=0x{0:08X}\n".format(0x1337) self.do(snippet, res) def testGlobalVariable(self): snippet = """ module sample; import io; var int G; function void do1() { G = G + 1; io.print2("G=", G); } function void do5() { G = G + 5; io.print2("G=", G); } function void start() { G = 0; do1(); do1(); do5(); do1(); do5(); } """ res = "".join("G=0x{0:08X}\n".format(a) for a in [1,2,7,8,13]) self.do(snippet, res) class TestSamplesOnVexpress(unittest.TestCase, Samples): def do(self, src, expected_output): # Construct binary file from snippet: o1 = ObjectFile() o2 = ObjectFile() asmb = Assemble(io.StringIO(startercode), 'arm', o1) comp = Compile([ relpath('..', 'kernel', 'src', 'io.c3'), relpath('..', 'kernel', 'arch', 'vexpressA9.c3'), io.StringIO(src)], [], 'arm', o2) sample_filename = 'testsample.bin' layout = {'code': 0x10000, 'data':0x20000} link = Link([o1, o2], layout, sample_filename) # Create task executor: runner = TaskRunner() runner.add_task(asmb) runner.add_task(comp) runner.add_task(link) runner.run_tasks() # Check bin file exists: self.assertTrue(os.path.isfile(sample_filename)) # Run bin file in emulator: res = runQemu(sample_filename, machine='vexpress-a9') os.remove(sample_filename) self.assertEqual(expected_output, res) if __name__ == '__main__': unittest.main()