def test_parsing_strliteral(): loop = parse(""" debug_merge_point(0, 0, 'StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]') """) ops = Function.from_operations(loop.operations, LoopStorage()) chunk = ops.chunks[0] assert chunk.bytecode_name.startswith('StrLiteralSearch')
def test_parsing_strliteral(): loop = parse(""" debug_merge_point(0, 'StrLiteralSearch at 11/51 [17, 8, 3, 1, 1, 1, 1, 51, 0, 19, 51, 1]') """) ops = Function.from_operations(loop.operations, LoopStorage()) chunk = ops.chunks[0] assert chunk.bytecode_name == 'StrLiteralSearch'
def test_parse_nonpython(): loop = parse(""" [] debug_merge_point(0, 0, 'random') """) f = Function.from_operations(loop.operations, LoopStorage()) assert f.filename is None
def test_parse_non_code(): ops = parse(''' [] debug_merge_point(0, 0, "SomeRandomStuff") ''') res = Function.from_operations(ops.operations, LoopStorage()) assert len(res.chunks) == 1 assert 'SomeRandomStuff' in res.chunks[0].repr()
def test_parse_non_code(): ops = parse(''' [] debug_merge_point(0, "SomeRandomStuff") ''') res = Function.from_operations(ops.operations, LoopStorage()) assert len(res.chunks) == 1 assert res.chunks[0].repr()
def test_parse_nonpython(): loop = parse(""" [] debug_merge_point(0, 0, 'random') debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP') """) f = Function.from_operations(loop.operations, LoopStorage()) assert f.chunks[-1].filename == 'x.py' assert f.filename is None
def test_parse_from_inside(): loop = parse(""" [] debug_merge_point(1, 0, 'two') debug_merge_point(2, 0, 'three') debug_merge_point(0, 0, 'one') """) f = Function.from_operations(loop.operations, LoopStorage()) assert len(f.chunks) == 2
def test_parse_nonpython(): loop = parse(""" [] debug_merge_point(0, 'random') debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP') """) f = Function.from_operations(loop.operations, LoopStorage()) assert f.chunks[-1].filename == 'x.py' assert f.filename is None
def test_linerange_notstarts(): fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(""" [p6, p1] debug_merge_point(0, '<code object h. file '%(fname)s'. line 11> #17 FOR_ITER') guard_class(p6, 144264192, descr=<Guard2>) p12 = getfield_gc(p6, descr=<GcPtrFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_w_seq 12>) """ % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.lineset
def test_lineno(): fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(''' [i0, i1] debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #0 LOAD_FAST") debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #3 LOAD_FAST") debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #6 BINARY_ADD") debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #7 RETURN_VALUE") ''' % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.chunks[1].lineno == 6
def test_lineno(): fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(''' [i0, i1] debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #0 LOAD_FAST") debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #3 LOAD_FAST") debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #6 BINARY_ADD") debug_merge_point(0, "<code object f. file '%(fname)s'. line 2> #7 RETURN_VALUE") ''' % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.chunks[1].lineno == 3
def test_linerange_notstarts(): if sys.version_info > (2, 6): py.test.skip("unportable test") fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(""" [p6, p1] debug_merge_point(0, 0, '<code object h. file '%(fname)s'. line 11> #17 FOR_ITER') guard_class(p6, 144264192, descr=<Guard0x2>) p12 = getfield_gc(p6, descr=<GcPtrFieldDescr pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_w_seq 12>) """ % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.lineset
def test_name_no_first(): ops = parse(''' [i0] i3 = int_add(i0, 1) debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 201> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 202> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage()) assert res.repr() == res.chunks[1].repr()
def test_name_no_first(): ops = parse(''' [i0] i3 = int_add(i0, 1) debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 201> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 202> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage()) assert res.repr() == res.chunks[1].repr()
def test_linerange(): fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(''' [i0, i1] debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #9 LOAD_FAST") debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #12 LOAD_CONST") debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #22 LOAD_CONST") debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #28 LOAD_CONST") debug_merge_point(0, "<code object g. file '%(fname)s'. line 5> #6 SETUP_LOOP") ''' % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.linerange == (7, 9) assert res.lineset == set([7, 8, 9])
def test_name(): ops = parse(''' [i0] debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 201> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 202> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage()) assert res.repr() == res.chunks[0].repr() assert res.repr() == "stuff, file '/I/dont/exist.py', line 200" assert res.startlineno == 200 assert res.filename == '/I/dont/exist.py' assert res.name == 'stuff'
def test_split(): ops = parse(''' [i0] debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 200> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, "<code object stuff. file '/I/dont/exist.py'. line 200> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage()) assert len(res.chunks) == 3 assert len(res.chunks[0].operations) == 1 assert len(res.chunks[1].operations) == 2 assert len(res.chunks[2].operations) == 2 assert res.chunks[2].bytecode_no == 11
def test_linerange(): if sys.version_info > (2, 6): py.test.skip("unportable test") fname = str(py.path.local(__file__).join('..', 'x.py')) ops = parse(''' [i0, i1] debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #9 LOAD_FAST") debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #12 LOAD_CONST") debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #22 LOAD_CONST") debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #28 LOAD_CONST") debug_merge_point(0, 0, "<code object g. file '%(fname)s'. line 5> #6 SETUP_LOOP") ''' % locals()) res = Function.from_operations(ops.operations, LoopStorage()) assert res.linerange == (7, 9) assert res.lineset == set([7, 8, 9])
def test_name(): ops = parse(''' [i0] debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 201> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 202> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage()) assert res.repr() == res.chunks[0].repr() assert res.repr() == "stuff, file '/I/dont/exist.py', line 200" assert res.startlineno == 200 assert res.filename == '/I/dont/exist.py' assert res.name == 'stuff'
def test_inlined_call(): ops = parse(""" [] debug_merge_point(0, 0, '<code object inlined_call. file 'source.py'. line 12> #28 CALL_FUNCTION') i18 = getfield_gc(p0, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>) debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #0 LOAD_FAST') debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #3 LOAD_CONST') debug_merge_point(1, 1, '<code object inner. file 'source.py'. line 9> #7 RETURN_VALUE') debug_merge_point(0, 0, '<code object inlined_call. file 'source.py'. line 12> #31 STORE_FAST') """) res = Function.from_operations(ops.operations, LoopStorage()) assert len(res.chunks) == 3 # two chunks + inlined call assert isinstance(res.chunks[0], TraceForOpcode) assert isinstance(res.chunks[1], Function) assert isinstance(res.chunks[2], TraceForOpcode) assert res.chunks[1].path == "1" assert len(res.chunks[1].chunks) == 3
def test_inlined_call(): ops = parse(""" [] debug_merge_point(0, '<code object inlined_call. file 'source.py'. line 12> #28 CALL_FUNCTION') i18 = getfield_gc(p0, descr=<BoolFieldDescr pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 89>) debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #0 LOAD_FAST') debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #3 LOAD_CONST') debug_merge_point(1, '<code object inner. file 'source.py'. line 9> #7 RETURN_VALUE') debug_merge_point(0, '<code object inlined_call. file 'source.py'. line 12> #31 STORE_FAST') """) res = Function.from_operations(ops.operations, LoopStorage()) assert len(res.chunks) == 3 # two chunks + inlined call assert isinstance(res.chunks[0], TraceForOpcode) assert isinstance(res.chunks[1], Function) assert isinstance(res.chunks[2], TraceForOpcode) assert res.chunks[1].path == "1" assert len(res.chunks[1].chunks) == 3
def test_split(): ops = parse(''' [i0] label() debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 200> #10 ADD") debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 200> #11 SUB") i1 = int_add(i0, 1) debug_merge_point(0, 0, "<code object stuff. file '/I/dont/exist.py'. line 200> #11 SUB") i2 = int_add(i1, 1) ''') res = Function.from_operations(ops.operations, LoopStorage(), loopname='<loopname>') assert len(res.chunks) == 4 assert len(res.chunks[0].operations) == 1 assert len(res.chunks[1].operations) == 1 assert len(res.chunks[2].operations) == 2 assert len(res.chunks[3].operations) == 2 assert res.chunks[3].bytecode_no == 11 assert res.chunks[0].bytecode_name == '<loopname>'