Mercurial > lcfOS
view test/testsamples.py @ 377:9667d78ba79e
Switched to xml for project description
author | Windel Bouwman |
---|---|
date | Fri, 11 Apr 2014 15:47:50 +0200 |
parents | 19eacf4f7270 |
children | 6df89163e114 |
line wrap: on
line source
import unittest import os import io from testemulation import runQemu, has_qemu from testzcc import relpath from ppci.buildfunctions import assemble, c3compile, link 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 = assemble(io.StringIO(startercode), 'arm') o2 = c3compile([ relpath('..', 'kernel', 'src', 'io.c3'), relpath('..', 'kernel', 'arch', 'vexpressA9.c3'), io.StringIO(src)], [], 'arm') layout = {'code': 0x10000, 'data': 0x20000} o3 = link([o1, o2], layout) sample_filename = 'testsample.bin' with open(sample_filename, 'wb') as f: f.write(o3.get_section('code').data) # 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()