355
|
1 import unittest
|
|
2 from testemulation import runQemu
|
|
3 from ppci.recipe import RecipeLoader
|
|
4 from ppci.tasks import TaskRunner
|
|
5
|
|
6
|
358
|
7 class Samples:
|
355
|
8 def testPrint(self):
|
|
9 snippet = """
|
|
10 module testsample;
|
|
11 import io;
|
|
12 function void start()
|
|
13 {
|
|
14 io.print("Hello world");
|
|
15 }
|
|
16 """
|
|
17 self.do(snippet, "Hello world")
|
|
18
|
|
19 def testForLoopPrint(self):
|
|
20 snippet = """
|
|
21 module testsample;
|
|
22 import io;
|
|
23 function void start()
|
|
24 {
|
|
25 var int i;
|
362
|
26 for (i=0; i<10; i++)
|
355
|
27 {
|
362
|
28 io.print2("A = ", i);
|
355
|
29 }
|
|
30 }
|
|
31 """
|
362
|
32 res = "".join("A = 0x{0:08X}\n".format(a) for a in range(10))
|
|
33 self.do(snippet, res)
|
355
|
34
|
364
|
35 def testForLoopPrint(self):
|
|
36 snippet = """
|
|
37 module testglobal;
|
|
38 import io;
|
|
39 var int G;
|
|
40 function void do1()
|
|
41 {
|
|
42 G = G + 1;
|
|
43 io.print2("G=", G);
|
|
44 }
|
|
45 function void do5()
|
|
46 {
|
|
47 G = G + 5;
|
|
48 io.print2("G=", G);
|
|
49 }
|
|
50 function void start()
|
|
51 {
|
|
52 G = 0;
|
|
53 do1();
|
|
54 do1();
|
|
55 do2();
|
|
56 do1();
|
|
57 do2();
|
|
58 }
|
|
59 """
|
|
60 res = "".join("G=0x{0:08X}\n".format(a) for a in [1,2,7,8,13])
|
|
61 self.do(snippet, res)
|
|
62
|
355
|
63
|
358
|
64 class TestSamplesOnVexpress(unittest.TestCase, Samples):
|
355
|
65 def do(self, src, expected_output):
|
|
66 runner = TaskRunner()
|
|
67 recipe_loader = RecipeLoader(runner)
|
363
|
68 # print(expected_output)
|
355
|
69 return
|
|
70 # TODO: improve recipe loading??
|
|
71 recipe_loader.load_dict({
|
|
72 'link': {
|
|
73 'inputs': [
|
|
74 ],
|
|
75 'layout': {
|
|
76 'code': 0x60010000,
|
|
77 'data': 0x60020000
|
|
78 },
|
|
79 'output': 'tst.bin'
|
|
80 }
|
|
81 })
|
|
82 runner.add_task(Compile())
|
|
83 runner.run_tasks()
|
364
|
84 res = runQemu('tst.bin', machine='vexpress-a9')
|
355
|
85 self.assertEqual(expected_output, res)
|
|
86
|
364
|
87
|
362
|
88 if __name__ == '__main__':
|
|
89 unittest.main()
|