Mercurial > lcfOS
comparison test/testasm.py @ 341:4d204f6f7d4e devel
Rewrite of assembler parts
author | Windel Bouwman |
---|---|
date | Fri, 28 Feb 2014 18:07:14 +0100 |
parents | b00219172a42 |
children | 86b02c98a717 |
comparison
equal
deleted
inserted
replaced
340:c7cc54c0dfdf | 341:4d204f6f7d4e |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
3 import unittest, cProfile | 3 import unittest, cProfile |
4 from ppci import CompilerError | 4 from ppci import CompilerError |
5 from ppci.asmnodes import AInstruction, ABinop, AUnop, ASymbol, ALabel, ANumber | 5 from ppci.asmnodes import AInstruction, ABinop, AUnop, ASymbol, ALabel, ANumber |
6 from ppci.assembler import tokenize, Assembler, asmParser, Lexer | 6 from ppci.assembler import tokenize, Assembler, Lexer |
7 from ppci.objectfile import ObjectFile | 7 from ppci.objectfile import ObjectFile |
8 from ppci.linker import Linker | 8 from ppci.linker import Linker |
9 import outstream | 9 import outstream |
10 from target import Label | 10 from target import Label |
11 | 11 |
14 """ Tests the assemblers lexer """ | 14 """ Tests the assemblers lexer """ |
15 | 15 |
16 def testLex0(self): | 16 def testLex0(self): |
17 """ Check if the lexer is OK """ | 17 """ Check if the lexer is OK """ |
18 asmline, toks = 'mov rax, rbx ', ['ID', 'ID', ',', 'ID', 'EOF'] | 18 asmline, toks = 'mov rax, rbx ', ['ID', 'ID', ',', 'ID', 'EOF'] |
19 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline)], toks) | 19 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline, [])], toks) |
20 | 20 |
21 def testLex1(self): | 21 def testLex1(self): |
22 """ Test if lexer correctly maps some tokens """ | 22 """ Test if lexer correctly maps some tokens """ |
23 asmline, toks = 'lab1: mov rax, rbx ', ['ID', ':', 'ID', 'ID', ',', 'ID', 'EOF'] | 23 asmline, toks = 'lab1: mov rax, rbx ', ['ID', ':', 'ID', 'ID', ',', 'ID', 'EOF'] |
24 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline)], toks) | 24 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline, [])], toks) |
25 | 25 |
26 def testLex2(self): | 26 def testLex2(self): |
27 """ Test if lexer correctly maps some tokens """ | 27 """ Test if lexer correctly maps some tokens """ |
28 asmline, toks = 'mov 3.13 0xC 13', ['ID', 'REAL', 'NUMBER', 'NUMBER', 'EOF'] | 28 asmline, toks = 'mov 3.13 0xC 13', ['ID', 'REAL', 'val5', 'val5', 'EOF'] |
29 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline)], toks) | 29 self.assertSequenceEqual([tok.typ for tok in tokenize(asmline, [])], toks) |
30 | 30 |
31 def testLex3(self): | 31 def testLex3(self): |
32 """ Test if lexer fails on a token that is invalid """ | 32 """ Test if lexer fails on a token that is invalid """ |
33 asmline = '0z4: mov rax, rbx $ ' | 33 asmline = '0z4: mov rax, rbx $ ' |
34 with self.assertRaises(CompilerError): | 34 with self.assertRaises(CompilerError): |
35 list(tokenize(asmline)) | 35 list(tokenize(asmline, [])) |
36 | 36 |
37 | 37 |
38 class AssemblerParsingTestCase(unittest.TestCase): | 38 class AssemblerParsingTestCase(unittest.TestCase): |
39 """ | 39 """ |
40 Tests the assembler parts | 40 Tests the assembler parts |
41 """ | 41 """ |
42 def setUp(self): | 42 def setUp(self): |
43 self.skipTest('refactoring asm parser') | |
43 self.parser = asmParser | 44 self.parser = asmParser |
44 self.stack = [] | 45 self.stack = [] |
45 | 46 |
46 def emit(self, x): | 47 def emit(self, x): |
47 self.stack.append(x) | 48 self.stack.append(x) |