[pypy-svn] r70453 - in pypy/trunk/pypy: interpreter/test module/pypyjit/test
arigo at codespeak.net
arigo at codespeak.net
Fri Jan 8 13:43:30 CET 2010
Author: arigo
Date: Fri Jan 8 13:43:29 2010
New Revision: 70453
Added:
pypy/trunk/pypy/module/pypyjit/test/test_pyframe.py
- copied, changed from r70450, pypy/trunk/pypy/interpreter/test/test_pyframe.py
Modified:
pypy/trunk/pypy/interpreter/test/test_pyframe.py
Log:
Move the test to module/pypyjit, where it should
be taken on by the nightly runners.
Modified: pypy/trunk/pypy/interpreter/test/test_pyframe.py
==============================================================================
--- pypy/trunk/pypy/interpreter/test/test_pyframe.py (original)
+++ pypy/trunk/pypy/interpreter/test/test_pyframe.py Fri Jan 8 13:43:29 2010
@@ -1,4 +1,3 @@
-import py
class AppTestPyFrame:
@@ -370,42 +369,3 @@
res = f(1)
sys.settrace(None)
assert res == 42
-
-class AppTestJitTraceInteraction(object):
-
- def setup_class(cls):
- from pypy import conftest
- if not conftest.option.runappdirect:
- py.test.skip("only for py.test -A")
-
- def test_trace_while_blackholing(self):
- import sys
- l = []
- printed = []
- def trace(frame, event, arg):
- l.append((frame.f_code.co_name, event))
- return trace
- def g(i, x):
- if i > x - 10:
- printed.append(i)
- if i == x - 5:
- sys.settrace(trace)
-
- def f(x):
- res = 0
- for i in range(x):
- res += i
- g(i, x)
-
- f(10)
- sys.settrace(None)
- print printed
- assert l == [('g', 'call'), ('g', 'line'), ('g', 'line'), ('g', 'line'), ('g', 'return')] * 4
- l1 = l
- l = []
- printed = []
- f(10000)
- sys.settrace(None)
- print printed
-
- assert l == l1
Copied: pypy/trunk/pypy/module/pypyjit/test/test_pyframe.py (from r70450, pypy/trunk/pypy/interpreter/test/test_pyframe.py)
==============================================================================
--- pypy/trunk/pypy/interpreter/test/test_pyframe.py (original)
+++ pypy/trunk/pypy/module/pypyjit/test/test_pyframe.py Fri Jan 8 13:43:29 2010
@@ -1,382 +1,7 @@
import py
-class AppTestPyFrame:
- # test for the presence of the attributes, not functionality
-
- def test_f_locals(self):
- import sys
- f = sys._getframe()
- assert f.f_locals is locals()
-
- def test_f_globals(self):
- import sys
- f = sys._getframe()
- assert f.f_globals is globals()
-
- def test_f_builtins(self):
- import sys, __builtin__
- f = sys._getframe()
- assert f.f_builtins is __builtin__.__dict__
-
- def test_f_code(self):
- def g():
- import sys
- f = sys._getframe()
- return f.f_code
- assert g() is g.func_code
-
- def test_f_trace_del(self):
- import sys
- f = sys._getframe()
- del f.f_trace
- assert f.f_trace is None
-
- def test_f_lineno(self):
- def g():
- import sys
- f = sys._getframe()
- x = f.f_lineno
- y = f.f_lineno
- z = f.f_lineno
- return [x, y, z]
- origin = g.func_code.co_firstlineno
- assert g() == [origin+3, origin+4, origin+5]
-
- def test_f_lineno_set(self):
- def tracer(f, *args):
- def x(f, *args):
- if f.f_lineno == origin + 1:
- f.f_lineno = origin + 2
- return x
-
- def function():
- xyz
- return 3
-
- def g():
- import sys
- sys.settrace(tracer)
- function()
- sys.settrace(None)
- origin = function.func_code.co_firstlineno
- g() # assert did not crash
-
- def test_f_back(self):
- import sys
- def f():
- assert sys._getframe().f_code.co_name == g()
- def g():
- return sys._getframe().f_back.f_code.co_name
- f()
-
- def test_f_exc_xxx(self):
- import sys
-
- class OuterException(Exception):
- pass
- class InnerException(Exception):
- pass
-
- def g(exc_info):
- f = sys._getframe()
- assert f.f_exc_type is None
- assert f.f_exc_value is None
- assert f.f_exc_traceback is None
- try:
- raise InnerException
- except:
- assert f.f_exc_type is exc_info[0]
- assert f.f_exc_value is exc_info[1]
- assert f.f_exc_traceback is exc_info[2]
- try:
- raise OuterException
- except:
- g(sys.exc_info())
-
- def test_trace_basic(self):
- import sys
- l = []
- class Tracer:
- def __init__(self, i):
- self.i = i
- def trace(self, frame, event, arg):
- l.append((self.i, frame.f_code.co_name, event, arg))
- if frame.f_code.co_name == 'g2':
- return None # don't trace g2
- return Tracer(self.i+1).trace
- def g3(n):
- n -= 5
- return n
- def g2(n):
- n += g3(2)
- n += g3(7)
- return n
- def g(n):
- n += g2(3)
- return n
- def f(n):
- n = g(n)
- return n * 7
- sys.settrace(Tracer(0).trace)
- x = f(4)
- sys.settrace(None)
- assert x == 42
- print l
- assert l == [(0, 'f', 'call', None),
- (1, 'f', 'line', None),
- (0, 'g', 'call', None),
- (1, 'g', 'line', None),
- (0, 'g2', 'call', None),
- (0, 'g3', 'call', None),
- (1, 'g3', 'line', None),
- (2, 'g3', 'line', None),
- (3, 'g3', 'return', -3),
- (0, 'g3', 'call', None),
- (1, 'g3', 'line', None),
- (2, 'g3', 'line', None),
- (3, 'g3', 'return', 2),
- (2, 'g', 'line', None),
- (3, 'g', 'return', 6),
- (2, 'f', 'line', None),
- (3, 'f', 'return', 42)]
-
- def test_trace_exc(self):
- import sys
- l = []
- def ltrace(a,b,c):
- if b == 'exception':
- l.append(c)
- return ltrace
- def trace(a,b,c): return ltrace
- def f():
- try:
- raise Exception
- except:
- pass
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 1
- assert isinstance(l[0][1], Exception)
-
- def test_trace_ignore_hidden(self):
- import sys
- import _testing
-
- l = []
- def trace(a,b,c):
- l.append((a,b,c))
-
- def f():
- h = _testing.Hidden()
- r = h.meth()
- return r
-
- sys.settrace(trace)
- res = f()
- sys.settrace(None)
- assert len(l) == 1
- assert l[0][1] == 'call'
- assert res == 'hidden' # sanity
-
- def test_trace_return_exc(self):
- import sys
- l = []
- def trace(a,b,c):
- if b in ('exception', 'return'):
- l.append((b, c))
- return trace
-
- def g():
- raise Exception
- def f():
- try:
- g()
- except:
- pass
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 4
- assert l[0][0] == 'exception'
- assert isinstance(l[0][1][1], Exception)
- assert l[1] == ('return', None)
- assert l[2][0] == 'exception'
- assert isinstance(l[2][1][1], Exception)
- assert l[3] == ('return', None)
-
- def test_trace_raises_on_return(self):
- import sys
- def trace(frame, event, arg):
- if event == 'return':
- raise ValueError
- else:
- return trace
-
- def f(): return 1
-
- for i in xrange(sys.getrecursionlimit() + 1):
- sys.settrace(trace)
- try:
- f()
- except ValueError:
- pass
-
- def test_trace_try_finally(self):
- import sys
- l = []
- def trace(frame, event, arg):
- if event == 'exception':
- l.append(arg)
- return trace
-
- def g():
- try:
- raise Exception
- finally:
- pass
-
- def f():
- try:
- g()
- except:
- pass
-
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 2
- assert issubclass(l[0][0], Exception)
- assert issubclass(l[1][0], Exception)
-
- def test_trace_raise_three_arg(self):
- import sys
- l = []
- def trace(frame, event, arg):
- if event == 'exception':
- l.append(arg)
- return trace
-
- def g():
- try:
- raise Exception
- except Exception, e:
- import sys
- raise Exception, e, sys.exc_info()[2]
-
- def f():
- try:
- g()
- except:
- pass
-
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 2
- assert issubclass(l[0][0], Exception)
- assert issubclass(l[1][0], Exception)
-
-
- def test_trace_generator_finalisation(self):
- # XXX expand to check more aspects
- import sys
- l = []
- def trace(frame, event, arg):
- if event == 'exception':
- l.append(arg)
- return trace
-
- d = {}
- exec """if 1:
- def g():
- try:
- yield True
- finally:
- pass
-
- def f():
- try:
- gen = g()
- gen.next()
- gen.close()
- except:
- pass
- """ in d
- f = d['f']
-
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 1
- assert issubclass(l[0][0], GeneratorExit)
-
- def test_dont_trace_on_reraise(self):
- import sys
- l = []
- def ltrace(a,b,c):
- if b == 'exception':
- l.append(c)
- return ltrace
- def trace(a,b,c): return ltrace
- def f():
- try:
- 1/0
- except:
- try:
- raise
- except:
- pass
- sys.settrace(trace)
- f()
- sys.settrace(None)
- assert len(l) == 1
- assert issubclass(l[0][0], Exception)
-
- def test_dont_trace_on_raise_with_tb(self):
- import sys
- l = []
- def ltrace(a,b,c):
- if b == 'exception':
- l.append(c)
- return ltrace
- def trace(a,b,c): return ltrace
- def f():
- try:
- raise Exception
- except:
- return sys.exc_info()
- def g():
- exc, val, tb = f()
- try:
- raise exc, val, tb
- except:
- pass
- sys.settrace(trace)
- g()
- sys.settrace(None)
- assert len(l) == 1
- assert isinstance(l[0][1], Exception)
-
- def test_trace_changes_locals(self):
- import sys
- def trace(frame, what, arg):
- frame.f_locals['x'] = 42
- return trace
- def f(x):
- return x
- sys.settrace(trace)
- res = f(1)
- sys.settrace(None)
- assert res == 42
-
-class AppTestJitTraceInteraction(object):
-
- def setup_class(cls):
- from pypy import conftest
- if not conftest.option.runappdirect:
- py.test.skip("only for py.test -A")
+class TestJitTraceInteraction(object):
def test_trace_while_blackholing(self):
import sys
More information about the Pypy-commit
mailing list