Esempio n. 1
0
 def test_smoke(self):
     ctx = Py27EmitterContext().emit_fragment(Return(Add(Load(0), Load(1))))
     self.assertEqual(
         ctx.last_builder.buf.tolist(),
         [124, 0, 0, 124, 1, 0, 23, 83])
     self.assertEqual(
         ctx.last_builder.stack_changes,
         [dec_inc(-0, +1), dec_inc(-0, +1), dec_inc(-2, +1), dec_inc(-1, 0)])
     self.assertEqual(ctx.last_builder.stack_usage(), (0, 0, 2))
     self.assertTrue(ctx.last_builder.is_valid_stack(), True)
Esempio n. 2
0
 def test_textbook_example(self):
     def fn(z):
         x = 3 + 6
         y = x - 5
         return z * y
     ctx = unemit(fn.__code__, Py27Op)
     self.assertEqual(ctx.ops, [
         Store("x", Const(9)),
         Store("y", Subtract(Load("x"), Const(5))),
         Return(Multiply(Load('z'), Load('y')))])
     # NOTE: this doesn't work yet but the goal is to make it work :)
     ctx = unemit(fn.__code__, Py27Op)
Esempio n. 3
0
 def test_it_really_works(self):
     ctx = Py27EmitterContext().emit(
         Function(('a', 'b'), "add two things together",
             Return(Add(Load('a'), Load('b')))))
     code = ctx.make_code(ctx.last_builder, name="add")
     globals = {}
     name = None
     argdefs = ()
     closure = ()
     # function(code, globals[, name[, argdefs[, closure]]])
     add = types.FunctionType(code, globals, name, argdefs, closure)
     # Now see if it really works
     self.assertEqual(add(1, 2), 3)
     self.assertEqual(add("hello", " world"), "hello world")
     self.assertEqual(add(['foo'], ['bar']), ['foo', 'bar'])
Esempio n. 4
0
 def test_Load(self):
     ctx = Py27EmitterContext().emit_fragment(Load(0xAABB))
     self.assertEqual(ctx.last_builder.buf.tolist(), [124, 0xBB, 0xAA])
     self.assertEqual(ctx.last_builder.stack_usage(), (0, 1, 1))
     self.assertFalse(ctx.last_builder.is_valid_stack())
Esempio n. 5
0
 def test_unemit_Load_Load_Multiplu_Return(self):
     fn = lambda a, b: a * b
     ctx = unemit(fn.__code__, Py27Op)
     self.assertEqual(ctx.retval, Return(Multiply(Load('a'), Load('b'))))
Esempio n. 6
0
 def test_unemit_Load_Load_Subtract_Return(self):
     fn = lambda a, b: a - b
     ctx = unemit(fn.__code__, Py27Op)
     self.assertEqual(ctx.retval, Return(Subtract(Load('a'), Load('b'))))
Esempio n. 7
0
 def test_unemit_Load_Load_Add_Return(self):
     fn = lambda a, b: a + b
     ctx = unemit(fn.__code__, Py27Op)
     self.assertEqual(ctx.retval, Return(Add(Load('a'), Load('b'))))
Esempio n. 8
0
 def test_unemit_Load_Return(self):
     fn = lambda x: x
     ctx = unemit(fn.__code__, Py27Op)
     self.assertEqual(ctx.retval, Return(Load('x')))
Esempio n. 9
0
 def test_Multiply_sanity(self):
     self.assertPerfectCode(
         lambda a, b: a * b,
         Function(('a', 'b'), None, Return(Multiply(Load("a"), Load("b")))))
Esempio n. 10
0
 def test_Subtract_sanity(self):
     self.assertPerfectCode(
         lambda a, b: a - b,
         Function(('a', 'b'), None, Return(Subtract(Load("a"), Load("b")))))
Esempio n. 11
0
 def test_Add_sanity(self):
     self.assertPerfectCode(
         lambda a, b: a + b,
         Function(('a', 'b'), None, Return(Add(Load("a"), Load("b")))))
Esempio n. 12
0
 def test_Neg_sanity(self):
     self.assertPerfectCode(
         lambda a: -a,
         Function(('a',), None, Return(Neg(Load("a")))))