Mercurial > lcfOS
view test/testsamples.py @ 375:19eacf4f7270
Started on memory manager
author | Windel Bouwman |
---|---|
date | Sun, 23 Mar 2014 15:44:06 +0100 |
parents | 72a3b646d543 |
children | 9667d78ba79e |
line wrap: on
line source
import unittest import os import io from testemulation import runQemu, has_qemu 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 setUp(self): if not has_qemu(): self.skipTest('Not running qemu tests') 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()