Mercurial > lcfOS
view test/testsamples.py @ 374:72a3b646d543
Added if statement sample
author | Windel Bouwman |
---|---|
date | Fri, 21 Mar 2014 15:27:18 +0100 |
parents | 68841f9ab96c |
children | 19eacf4f7270 |
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 testIfStatement(self): snippet = """ module sample; import io; function void start() { var int i; i = 13; if (i*7 < 100) { io.print("Wow"); } else { io.print("Outch"); } } """ res = "Wow" 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()