diff options
| -rw-r--r-- | test/ir/ir2C.py | 80 |
1 files changed, 45 insertions, 35 deletions
diff --git a/test/ir/ir2C.py b/test/ir/ir2C.py index c5ae1b8f..1089bba4 100644 --- a/test/ir/ir2C.py +++ b/test/ir/ir2C.py @@ -6,52 +6,62 @@ import unittest class TestIrIr2C(unittest.TestCase): + def translationTest(self, expr, expected): + from miasm2.ir.translators.C import TranslatorC + + self.assertEqual(TranslatorC.from_expr(expr), expected) + def test_ExprOp_toC(self): from miasm2.expression.expression import ExprInt32, ExprOp - import miasm2.ir.ir2C # /!\ REALLY DIRTY HACK + from miasm2.ir.translators.C import TranslatorC + args = [ExprInt32(i) for i in xrange(9)] + # Unary operators - self.assertEqual( - ExprOp('parity', *args[:1]).toC(), r'parity(0x0&0xffffffff)') - self.assertEqual( - ExprOp('!', *args[:1]).toC(), r'(~ 0x0)&0xffffffff') - self.assertEqual( - ExprOp('hex2bcd', *args[:1]).toC(), r'hex2bcd_32(0x0)') - self.assertEqual(ExprOp('fabs', *args[:1]).toC(), r'fabs(0x0)') - self.assertRaises(ValueError, ExprOp('X', *args[:1]).toC) + self.translationTest( + ExprOp('parity', *args[:1]), r'parity(0x0&0xffffffff)') + self.translationTest( + ExprOp('!', *args[:1]), r'(~ 0x0)&0xffffffff') + self.translationTest( + ExprOp('hex2bcd', *args[:1]), r'hex2bcd_32(0x0)') + self.translationTest(ExprOp('fabs', *args[:1]), r'fabs(0x0)') + self.assertRaises(NotImplementedError, TranslatorC.from_expr, + ExprOp('X', *args[:1])) # Binary operators - self.assertEqual( - ExprOp('==', *args[:2]).toC(), r'(((0x0&0xffffffff) == (0x1&0xffffffff))?1:0)') - self.assertEqual( - ExprOp('%', *args[:2]).toC(), r'(((0x0&0xffffffff)%(0x1&0xffffffff))&0xffffffff)') - self.assertEqual( - ExprOp('-', *args[:2]).toC(), r'(((0x0&0xffffffff) - (0x1&0xffffffff))&0xffffffff)') - self.assertEqual( - ExprOp('bsr', *args[:2]).toC(), r'my_bsr(0x0, 0x1)') - self.assertEqual( - ExprOp('cpuid0', *args[:2]).toC(), r'cpuid0(0x0, 0x1)') - self.assertEqual( - ExprOp('fcom0', *args[:2]).toC(), r'fcom0(0x0, 0x1)') - self.assertEqual( - ExprOp('fadd', *args[:2]).toC(), r'fadd(0x0, 0x1)') - self.assertEqual( - ExprOp('segm', *args[:2]).toC(), r'segm2addr(vmcpu, 0x0, 0x1)') - self.assertEqual( - ExprOp('imod', *args[:2]).toC(), r'imod32(vmcpu, 0x0, 0x1)') - self.assertEqual( - ExprOp('bcdadd', *args[:2]).toC(), r'bcdadd_32(0x0, 0x1)') - self.assertRaises(ValueError, ExprOp('X', *args[:2]).toC) + self.translationTest( + ExprOp('==', *args[:2]), r'(((0x0&0xffffffff) == (0x1&0xffffffff))?1:0)') + self.translationTest( + ExprOp('%', *args[:2]), r'(((0x0&0xffffffff)%(0x1&0xffffffff))&0xffffffff)') + self.translationTest( + ExprOp('-', *args[:2]), r'(((0x0&0xffffffff) - (0x1&0xffffffff))&0xffffffff)') + self.translationTest( + ExprOp('bsr', *args[:2]), r'my_bsr(0x0, 0x1)') + self.translationTest( + ExprOp('cpuid0', *args[:2]), r'cpuid0(0x0, 0x1)') + self.translationTest( + ExprOp('fcom0', *args[:2]), r'fcom0(0x0, 0x1)') + self.translationTest( + ExprOp('fadd', *args[:2]), r'fadd(0x0, 0x1)') + self.translationTest( + ExprOp('segm', *args[:2]), r'segm2addr(vmcpu, 0x0, 0x1)') + self.translationTest( + ExprOp('imod', *args[:2]), r'imod32(vmcpu, 0x0, 0x1)') + self.translationTest( + ExprOp('bcdadd', *args[:2]), r'bcdadd_32(0x0, 0x1)') + self.assertRaises(NotImplementedError, TranslatorC.from_expr, + ExprOp('X', *args[:2])) # Ternary operators - self.assertEqual( - ExprOp('div8', *args[:3]).toC(), r'(div_op(32, 0x0, 0x1, 0x2) &0xffffffff)') + self.translationTest( + ExprOp('div8', *args[:3]), r'(div_op(32, 0x0, 0x1, 0x2) &0xffffffff)') # Other cases - self.assertEqual( - ExprOp('+', *args[:3]).toC(), r'(((0x0&0xffffffff)+(0x1&0xffffffff)+(0x2&0xffffffff))&0xffffffff)') - self.assertRaises(NotImplementedError, ExprOp('X', *args[:3]).toC) + self.translationTest( + ExprOp('+', *args[:3]), r'(((0x0&0xffffffff)+(0x1&0xffffffff)+(0x2&0xffffffff))&0xffffffff)') + self.assertRaises(NotImplementedError, TranslatorC.from_expr, + ExprOp('X', *args[:3])) if __name__ == '__main__': testsuite = unittest.TestLoader().loadTestsFromTestCase(TestIrIr2C) |