def test_jump(self): namespace = {'target': JitCellToken()} namespace['target'].number = 3 inp = ''' [i0] jump(i0, descr=target) ''' loop = pure_parse(inp, namespace=namespace) logger = Logger(self.make_metainterp_sd()) output = logger.log_loop(loop) assert output.splitlines()[-1] == "jump(i0, descr=<Loop3>)" pure_parse(output)
def test_equaloplists(): ops = """ [i0] i1 = int_add(i0, 1) i2 = int_add(i1, 1) guard_true(i1) [i2] jump(i1) """ namespace = {} loop1 = pure_parse(ops, namespace=namespace) loop2 = pure_parse(ops, namespace=namespace) loop3 = pure_parse(ops.replace("i2 = int_add", "i2 = int_sub"), namespace=namespace) assert equaloplists(loop1.operations, loop2.operations) py.test.raises(AssertionError, "equaloplists(loop1.operations, loop3.operations)")
def reparse(self, inp, namespace=None, check_equal=True): """ parse loop once, then log it and parse again. Checks that we get the same thing. """ if namespace is None: namespace = {} loop = pure_parse(inp, namespace=namespace) logger = Logger(self.make_metainterp_sd()) output = logger.log_loop(loop, namespace) oloop = pure_parse(output, namespace=namespace) if check_equal: equaloplists(loop.operations, oloop.operations) assert oloop.inputargs == loop.inputargs return logger, loop, oloop
def test_class_name(self): from pypy.rpython.lltypesystem import lltype AbcVTable = lltype.Struct('AbcVTable') abcvtable = lltype.malloc(AbcVTable, immortal=True) namespace = {'Name': abcvtable} inp = ''' [i0] p = new_with_vtable(ConstClass(Name)) ''' loop = pure_parse(inp, namespace=namespace) logger = Logger(self.make_metainterp_sd()) output = logger.log_loop(loop) assert output.splitlines()[-1].endswith( " = new_with_vtable(ConstClass(Name))") pure_parse(output, namespace=namespace)
def test_equaloplists_fail_args(): ops = """ [i0] i1 = int_add(i0, 1) i2 = int_add(i1, 1) guard_true(i1) [i2, i1] jump(i1) """ namespace = {} loop1 = pure_parse(ops, namespace=namespace) loop2 = pure_parse(ops.replace("[i2, i1]", "[i1, i2]"), namespace=namespace) py.test.raises(AssertionError, "equaloplists(loop1.operations, loop2.operations)") assert equaloplists(loop1.operations, loop2.operations, strict_fail_args=False) loop3 = pure_parse(ops.replace("[i2, i1]", "[i2, i0]"), namespace=namespace) py.test.raises(AssertionError, "equaloplists(loop1.operations, loop3.operations)")
def test_guard_descr(self): namespace = {'fdescr': BasicFailDescr()} inp = ''' [i0] guard_true(i0, descr=fdescr) [i0] ''' loop = pure_parse(inp, namespace=namespace) logger = Logger(self.make_metainterp_sd(), guard_number=True) output = logger.log_loop(loop) assert output.splitlines()[-1] == "guard_true(i0, descr=<Guard0>) [i0]" pure_parse(output) logger = Logger(self.make_metainterp_sd(), guard_number=False) output = logger.log_loop(loop) lastline = output.splitlines()[-1] assert lastline.startswith("guard_true(i0, descr=<") assert not lastline.startswith("guard_true(i0, descr=<Guard")
def test_ops_offset(self): inp = ''' [i0] i1 = int_add(i0, 1) i2 = int_mul(i1, 2) jump(i2) ''' loop = pure_parse(inp) ops = loop.operations ops_offset = {ops[0]: 10, ops[2]: 30, None: 40} logger = Logger(self.make_metainterp_sd()) output = logger.log_loop(loop, ops_offset=ops_offset) assert output.strip() == """ [i0] +10: i2 = int_add(i0, 1) i4 = int_mul(i2, 2) +30: jump(i4) +40: --end of the loop-- """.strip()
def test_ops_offset(self): inp = ''' [i0] i1 = int_add(i0, 1) i2 = int_mul(i1, 2) jump(i2) ''' loop = pure_parse(inp) ops = loop.operations ops_offset = { ops[0]: 10, ops[2]: 30, None: 40 } logger = Logger(self.make_metainterp_sd()) output = logger.log_loop(loop, ops_offset=ops_offset) assert output.strip() == """ [i0] +10: i2 = int_add(i0, 1) i4 = int_mul(i2, 2) +30: jump(i4) +40: --end of the loop-- """.strip()
def test_intro_bridge(self): bare_logger = logger.Logger(self.make_metainterp_sd()) output = capturing(bare_logger.log_bridge, [], [], 3) assert output.splitlines()[0] == "# bridge out of Guard 3 with 0 ops" pure_parse(output)
def test_intro_loop(self): bare_logger = logger.Logger(self.make_metainterp_sd()) output = capturing(bare_logger.log_loop, [], [], 1, "foo") assert output.splitlines()[0] == "# Loop 1 () : foo with 0 ops" pure_parse(output)