aboutsummaryrefslogtreecommitdiff
path: root/tests/misc
diff options
context:
space:
mode:
authorDavid Lechner2020-03-22 21:26:08 -0500
committerDamien George2020-03-30 13:21:58 +1100
commit3dc324d3f1312e40d3a8ed87e7244966bb756f26 (patch)
tree94ff44f8eabba0039582c245b901173597edd11e /tests/misc
parent488613bca6c460340ed2995ae5cafafe22d0bfff (diff)
tests: Format all Python code with black, except tests in basics subdir.
This adds the Python files in the tests/ directory to be formatted with ./tools/codeformat.py. The basics/ subdirectory is excluded for now so we aren't changing too much at once. In a few places `# fmt: off`/`# fmt: on` was used where the code had special formatting for readability or where the test was actually testing the specific formatting.
Diffstat (limited to 'tests/misc')
-rw-r--r--tests/misc/features.py234
-rw-r--r--tests/misc/non_compliant.py80
-rw-r--r--tests/misc/non_compliant_lexer.py24
-rw-r--r--tests/misc/print_exception.py32
-rw-r--r--tests/misc/rge_sm.py71
-rw-r--r--tests/misc/sys_atexit.py5
-rw-r--r--tests/misc/sys_exc_info.py5
-rw-r--r--tests/misc/sys_settrace_features.py45
-rw-r--r--tests/misc/sys_settrace_generator.py33
-rw-r--r--tests/misc/sys_settrace_generator.py.exp276
-rw-r--r--tests/misc/sys_settrace_loop.py25
-rw-r--r--tests/misc/sys_settrace_loop.py.exp92
-rw-r--r--tests/misc/sys_settrace_subdir/trace_generic.py20
-rw-r--r--tests/misc/sys_settrace_subdir/trace_importme.py6
14 files changed, 546 insertions, 402 deletions
diff --git a/tests/misc/features.py b/tests/misc/features.py
index 874945bfc..455b44fb1 100644
--- a/tests/misc/features.py
+++ b/tests/misc/features.py
@@ -7,159 +7,199 @@ except AttributeError:
# mad.py
# Alf Clement 27-Mar-2014
#
-zero=0
-three=3
+zero = 0
+three = 3
print("1")
print("2")
print(three)
print("{}".format(4))
-five=25//5
+five = 25 // 5
print(int(five))
-j=0
+j = 0
for i in range(4):
- j += i
+ j += i
print(j)
-print(3+4)
+print(3 + 4)
try:
- a=4//zero
+ a = 4 // zero
except:
- print(8)
+ print(8)
print("xxxxxxxxx".count("x"))
+
+
def ten():
- return 10
+ return 10
+
+
print(ten())
-a=[]
+a = []
for i in range(13):
- a.append(i)
-print(a[11])
+ a.append(i)
+print(a[11])
print(a[-1])
-str="0123456789"
-print(str[1]+str[3])
+str = "0123456789"
+print(str[1] + str[3])
+
+
def p(s):
- print(s)
+ print(s)
+
+
p("14")
p(15)
+
+
class A:
- def __init__(self):
- self.a=16
- def print(self):
- print(self.a)
- def set(self,b):
- self.a=b
-a=A()
+ def __init__(self):
+ self.a = 16
+
+ def print(self):
+ print(self.a)
+
+ def set(self, b):
+ self.a = b
+
+
+a = A()
a.print()
a.set(17)
a.print()
-b=A()
+b = A()
b.set(a.a + 1)
b.print()
for i in range(20):
- pass
+ pass
print(i)
if 20 > 30:
- a="1"
+ a = "1"
else:
- a="2"
+ a = "2"
if 0 < 4:
- print(a+"0")
+ print(a + "0")
else:
- print(a+"1")
-a=[20,21,22,23,24]
+ print(a + "1")
+a = [20, 21, 22, 23, 24]
for i in a:
- if i < 21:
- continue
- if i > 21:
- break
- print(i)
-b=[a,a,a]
+ if i < 21:
+ continue
+ if i > 21:
+ break
+ print(i)
+b = [a, a, a]
print(b[1][2])
-print(161//7)
-a=24
+print(161 // 7)
+a = 24
while True:
- try:
- def gcheck():
- global a
- print(a)
- gcheck()
- class c25():
- x=25
- x=c25()
- print(x.x)
- raise
- except:
- print(26)
- print(27+zero)
- break
+ try:
+
+ def gcheck():
+ global a
+ print(a)
+
+ gcheck()
+
+ class c25:
+ x = 25
+
+ x = c25()
+ print(x.x)
+ raise
+ except:
+ print(26)
+ print(27 + zero)
+ break
print(28)
-k=29
+k = 29
+
+
def f():
- global k
- k = yield k
+ global k
+ k = yield k
+
+
print(next(f()))
while True:
- k+= 1
- if k < 30:
- continue
- break
+ k += 1
+ if k < 30:
+ continue
+ break
print(k)
-for i in [1,2,3]:
- class A():
- def __init__(self, c):
- self.a = i+10*c
- b = A(3)
- print(b.a)
+for i in [1, 2, 3]:
+
+ class A:
+ def __init__(self, c):
+ self.a = i + 10 * c
+
+ b = A(3)
+ print(b.a)
print(34)
-p=0
+p = 0
for i in range(35, -1, -1):
- print(i)
- p = p + 1
- if p > 0:
- break
-p=36
+ print(i)
+ p = p + 1
+ if p > 0:
+ break
+p = 36
while p == 36:
- print(p)
- p=37
+ print(p)
+ p = 37
print(p)
for i in [38]:
- print(i)
-print(int(exec("def foo(): return 38") == None)+foo())
+ print(i)
+print(int(exec("def foo(): return 38") == None) + foo())
d = {}
exec("def bar(): return 40", d)
print(d["bar"]())
+
+
def fib2(n):
- result = []
- a, b = 0, 1
- while a < n:
- result.append(a)
- a, b = b, a+b
- return result
-print(fib2(100)[-2]-14)
-Answer={}
-Answer["ForAll"]=42
+ result = []
+ a, b = 0, 1
+ while a < n:
+ result.append(a)
+ a, b = b, a + b
+ return result
+
+
+print(fib2(100)[-2] - 14)
+Answer = {}
+Answer["ForAll"] = 42
print(Answer["ForAll"])
i = 43
+
+
def f(i=i):
print(i)
+
+
i = 44
f()
print(i)
while True:
- try:
- if None != True:
- print(45)
- break
- else:
- print(0)
- except:
- print(0)
+ try:
+ if None != True:
+ print(45)
+ break
+ else:
+ print(0)
+ except:
+ print(0)
print(46)
-print(46+1)
+print(46 + 1)
+
+
def u(p):
- if p > 3:
- return 3*p
- else:
- return u(2*p)-3*u(p)
+ if p > 3:
+ return 3 * p
+ else:
+ return u(2 * p) - 3 * u(p)
+
+
print(u(16))
+
+
def u49():
- return 49
+ return 49
+
+
print(u49())
diff --git a/tests/misc/non_compliant.py b/tests/misc/non_compliant.py
index ea6738222..ebba9b16a 100644
--- a/tests/misc/non_compliant.py
+++ b/tests/misc/non_compliant.py
@@ -9,143 +9,153 @@ except ImportError:
# when super can't find self
try:
- exec('def f(): super()')
+ exec("def f(): super()")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
# store to exception attribute is not allowed
try:
ValueError().x = 0
except AttributeError:
- print('AttributeError')
+ print("AttributeError")
# array deletion not implemented
try:
- a = array.array('b', (1, 2, 3))
+ a = array.array("b", (1, 2, 3))
del a[1]
except TypeError:
- print('TypeError')
+ print("TypeError")
# slice with step!=1 not implemented
try:
- a = array.array('b', (1, 2, 3))
+ a = array.array("b", (1, 2, 3))
print(a[3:2:2])
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# containment, looking for integer not implemented
try:
- print(1 in array.array('B', b'12'))
+ print(1 in array.array("B", b"12"))
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# uPy raises TypeError, shold be ValueError
try:
- '%c' % b'\x01\x02'
+ "%c" % b"\x01\x02"
except (TypeError, ValueError):
- print('TypeError, ValueError')
+ print("TypeError, ValueError")
# attributes/subscr not implemented
try:
- print('{a[0]}'.format(a=[1, 2]))
+ print("{a[0]}".format(a=[1, 2]))
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# str(...) with keywords not implemented
try:
- str(b'abc', encoding='utf8')
+ str(b"abc", encoding="utf8")
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# str.rsplit(None, n) not implemented
try:
- 'a a a'.rsplit(None, 1)
+ "a a a".rsplit(None, 1)
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# str.endswith(s, start) not implemented
try:
- 'abc'.endswith('c', 1)
+ "abc".endswith("c", 1)
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# str subscr with step!=1 not implemented
try:
- print('abc'[1:2:3])
+ print("abc"[1:2:3])
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# bytes(...) with keywords not implemented
try:
- bytes('abc', encoding='utf8')
+ bytes("abc", encoding="utf8")
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# bytes subscr with step!=1 not implemented
try:
- b'123'[0:3:2]
+ b"123"[0:3:2]
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# tuple load with step!=1 not implemented
try:
()[2:3:4]
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# list store with step!=1 not implemented
try:
[][2:3:4] = []
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# list delete with step!=1 not implemented
try:
del [][2:3:4]
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# struct pack with too many args, not checked by uPy
-print(ustruct.pack('bb', 1, 2, 3))
+print(ustruct.pack("bb", 1, 2, 3))
# struct pack with too few args, not checked by uPy
-print(ustruct.pack('bb', 1))
+print(ustruct.pack("bb", 1))
# array slice assignment with unsupported RHS
try:
bytearray(4)[0:1] = [1, 2]
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
# can't assign attributes to a function
def f():
pass
+
+
try:
f.x = 1
except AttributeError:
- print('AttributeError')
+ print("AttributeError")
# can't call a function type (ie make new instances of a function)
try:
type(f)()
except TypeError:
- print('TypeError')
+ print("TypeError")
# test when object explicitly listed at not-last position in parent tuple
# this is not compliant with CPython because of illegal MRO
class A:
def foo(self):
- print('A.foo')
+ print("A.foo")
+
+
class B(object, A):
pass
+
+
B().foo()
# can't assign property (or other special accessors) to already-subclassed class
class A:
pass
+
+
class B(A):
pass
+
+
try:
A.bar = property()
except AttributeError:
- print('AttributeError')
+ print("AttributeError")
diff --git a/tests/misc/non_compliant_lexer.py b/tests/misc/non_compliant_lexer.py
index 7e50d2836..e1c21f3d7 100644
--- a/tests/misc/non_compliant_lexer.py
+++ b/tests/misc/non_compliant_lexer.py
@@ -1,31 +1,33 @@
# lexer tests for things that are not implemented, or have non-compliant behaviour
+
def test(code):
try:
exec(code)
- print('no Error')
+ print("no Error")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
except NotImplementedError:
- print('NotImplementedError')
+ print("NotImplementedError")
+
# uPy requires spaces between literal numbers and keywords, CPy doesn't
try:
- eval('1and 0')
+ eval("1and 0")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
try:
- eval('1or 0')
+ eval("1or 0")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
try:
- eval('1if 1else 0')
+ eval("1if 1else 0")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
try:
- eval('1if 0else 0')
+ eval("1if 0else 0")
except SyntaxError:
- print('SyntaxError')
+ print("SyntaxError")
# unicode name escapes are not implemented
test('"\\N{LATIN SMALL LETTER A}"')
diff --git a/tests/misc/print_exception.py b/tests/misc/print_exception.py
index 2067030bf..f26c1fd5a 100644
--- a/tests/misc/print_exception.py
+++ b/tests/misc/print_exception.py
@@ -1,4 +1,5 @@
import sys
+
try:
try:
import uio as io
@@ -8,12 +9,14 @@ except ImportError:
print("SKIP")
raise SystemExit
-if hasattr(sys, 'print_exception'):
+if hasattr(sys, "print_exception"):
print_exception = sys.print_exception
else:
import traceback
+
print_exception = lambda e, f: traceback.print_exception(None, e, sys.exc_info()[2], file=f)
+
def print_exc(e):
buf = io.StringIO()
print_exception(e, buf)
@@ -29,22 +32,27 @@ def print_exc(e):
elif not l.startswith(" "):
print(l)
+
# basic exception message
try:
- raise Exception('msg')
+ raise Exception("msg")
except Exception as e:
- print('caught')
+ print("caught")
print_exc(e)
# exception message with more than 1 source-code line
def f():
g()
+
+
def g():
- raise Exception('fail')
+ raise Exception("fail")
+
+
try:
f()
except Exception as e:
- print('caught')
+ print("caught")
print_exc(e)
# Test that an exception propagated through a finally doesn't have a traceback added there
@@ -52,9 +60,9 @@ try:
try:
f()
finally:
- print('finally')
+ print("finally")
except Exception as e:
- print('caught')
+ print("caught")
print_exc(e)
# Test that re-raising an exception doesn't add traceback info
@@ -62,25 +70,27 @@ try:
try:
f()
except Exception as e:
- print('reraise')
+ print("reraise")
print_exc(e)
raise
except Exception as e:
- print('caught')
+ print("caught")
print_exc(e)
# Here we have a function with lots of bytecode generated for a single source-line, and
# there is an error right at the end of the bytecode. It should report the correct line.
def f():
- f([1, 2], [1, 2], [1, 2], {1:1, 1:1, 1:1, 1:1, 1:1, 1:1, 1:f.X})
+ f([1, 2], [1, 2], [1, 2], {1: 1, 1: 1, 1: 1, 1: 1, 1: 1, 1: 1, 1: f.X})
return 1
+
+
try:
f()
except Exception as e:
print_exc(e)
# Test non-stream object passed as output object, only valid for uPy
-if hasattr(sys, 'print_exception'):
+if hasattr(sys, "print_exception"):
try:
sys.print_exception(Exception, 1)
had_exception = False
diff --git a/tests/misc/rge_sm.py b/tests/misc/rge_sm.py
index 5bbf9d48b..f3bb4189f 100644
--- a/tests/misc/rge_sm.py
+++ b/tests/misc/rge_sm.py
@@ -3,30 +3,31 @@
import math
+
class RungeKutta(object):
def __init__(self, functions, initConditions, t0, dh, save=True):
- self.Trajectory, self.save = [[t0] + initConditions], save
- self.functions = [lambda *args: 1.0] + list(functions)
- self.N, self.dh = len(self.functions), dh
- self.coeff = [1.0/6.0, 2.0/6.0, 2.0/6.0, 1.0/6.0]
- self.InArgCoeff = [0.0, 0.5, 0.5, 1.0]
+ self.Trajectory, self.save = [[t0] + initConditions], save
+ self.functions = [lambda *args: 1.0] + list(functions)
+ self.N, self.dh = len(self.functions), dh
+ self.coeff = [1.0 / 6.0, 2.0 / 6.0, 2.0 / 6.0, 1.0 / 6.0]
+ self.InArgCoeff = [0.0, 0.5, 0.5, 1.0]
def iterate(self):
- step = self.Trajectory[-1][:]
- istep, iac = step[:], self.InArgCoeff
+ step = self.Trajectory[-1][:]
+ istep, iac = step[:], self.InArgCoeff
k, ktmp = self.N * [0.0], self.N * [0.0]
for ic, c in enumerate(self.coeff):
for if_, f in enumerate(self.functions):
- arguments = [ (x + k[i]*iac[ic]) for i, x in enumerate(istep)]
+ arguments = [(x + k[i] * iac[ic]) for i, x in enumerate(istep)]
try:
feval = f(*arguments)
except OverflowError:
return False
- if abs(feval) > 1e2: # stop integrating
+ if abs(feval) > 1e2: # stop integrating
return False
- ktmp[if_] = self.dh * feval
+ ktmp[if_] = self.dh * feval
k = ktmp[:]
- step = [s + c*k[ik] for ik,s in enumerate(step)]
+ step = [s + c * k[ik] for ik, s in enumerate(step)]
if self.save:
self.Trajectory += [step]
else:
@@ -46,23 +47,45 @@ class RungeKutta(object):
def series(self):
return zip(*self.Trajectory)
+
# 1-loop RGES for the main parameters of the SM
# couplings are: g1, g2, g3 of U(1), SU(2), SU(3); yt (top Yukawa), lambda (Higgs quartic)
# see arxiv.org/abs/0812.4950, eqs 10-15
sysSM = (
- lambda *a: 41.0 / 96.0 / math.pi**2 * a[1]**3, # g1
- lambda *a: -19.0 / 96.0 / math.pi**2 * a[2]**3, # g2
- lambda *a: -42.0 / 96.0 / math.pi**2 * a[3]**3, # g3
- lambda *a: 1.0 / 16.0 / math.pi**2 * (9.0 / 2.0 * a[4]**3 - 8.0 * a[3]**2 * a[4] - 9.0 / 4.0 * a[2]**2 * a[4] - 17.0 / 12.0 * a[1]**2 * a[4]), # yt
- lambda *a: 1.0 / 16.0 / math.pi**2 * (24.0 * a[5]**2 + 12.0 * a[4]**2 * a[5] - 9.0 * a[5] * (a[2]**2 + 1.0 / 3.0 * a[1]**2) - 6.0 * a[4]**4 + 9.0 / 8.0 * a[2]**4 + 3.0 / 8.0 * a[1]**4 + 3.0 / 4.0 * a[2]**2 * a[1]**2), # lambda
+ lambda *a: 41.0 / 96.0 / math.pi ** 2 * a[1] ** 3, # g1
+ lambda *a: -19.0 / 96.0 / math.pi ** 2 * a[2] ** 3, # g2
+ lambda *a: -42.0 / 96.0 / math.pi ** 2 * a[3] ** 3, # g3
+ lambda *a: 1.0
+ / 16.0
+ / math.pi ** 2
+ * (
+ 9.0 / 2.0 * a[4] ** 3
+ - 8.0 * a[3] ** 2 * a[4]
+ - 9.0 / 4.0 * a[2] ** 2 * a[4]
+ - 17.0 / 12.0 * a[1] ** 2 * a[4]
+ ), # yt
+ lambda *a: 1.0
+ / 16.0
+ / math.pi ** 2
+ * (
+ 24.0 * a[5] ** 2
+ + 12.0 * a[4] ** 2 * a[5]
+ - 9.0 * a[5] * (a[2] ** 2 + 1.0 / 3.0 * a[1] ** 2)
+ - 6.0 * a[4] ** 4
+ + 9.0 / 8.0 * a[2] ** 4
+ + 3.0 / 8.0 * a[1] ** 4
+ + 3.0 / 4.0 * a[2] ** 2 * a[1] ** 2
+ ), # lambda
)
+
def drange(start, stop, step):
r = start
while r < stop:
yield r
r += step
+
def phaseDiagram(system, trajStart, trajPlot, h=0.1, tend=1.0, range=1.0):
tstart = 0.0
for i in drange(0, range, 0.1 * range):
@@ -82,10 +105,10 @@ def phaseDiagram(system, trajStart, trajPlot, h=0.1, tend=1.0, range=1.0):
p2 = rk.Trajectory[2 * l]
x1, y1 = trajPlot(p1)
x2, y2 = trajPlot(p2)
- dx = -0.5 * (y2 - y1) # orthogonal to line
+ dx = -0.5 * (y2 - y1) # orthogonal to line
dy = 0.5 * (x2 - x1) # orthogonal to line
- #l = math.sqrt(dx*dx + dy*dy)
- #if abs(l) > 1e-3:
+ # l = math.sqrt(dx*dx + dy*dy)
+ # if abs(l) > 1e-3:
# l = 0.1 / l
# dx *= l
# dy *= l
@@ -94,6 +117,7 @@ def phaseDiagram(system, trajStart, trajPlot, h=0.1, tend=1.0, range=1.0):
print(x1 - dx, y1 - dy)
print()
+
def singleTraj(system, trajStart, h=0.02, tend=1.0):
tstart = 0.0
@@ -106,9 +130,12 @@ def singleTraj(system, trajStart, h=0.02, tend=1.0):
for i in range(len(rk.Trajectory)):
tr = rk.Trajectory[i]
- print(' '.join(["{:.4f}".format(t) for t in tr]))
+ print(" ".join(["{:.4f}".format(t) for t in tr]))
+
-#phaseDiagram(sysSM, (lambda i, j: [0.354, 0.654, 1.278, 0.8 + 0.2 * i, 0.1 + 0.1 * j]), (lambda a: (a[4], a[5])), h=0.1, tend=math.log(10**17))
+# phaseDiagram(sysSM, (lambda i, j: [0.354, 0.654, 1.278, 0.8 + 0.2 * i, 0.1 + 0.1 * j]), (lambda a: (a[4], a[5])), h=0.1, tend=math.log(10**17))
# initial conditions at M_Z
-singleTraj(sysSM, [0.354, 0.654, 1.278, 0.983, 0.131], h=0.5, tend=math.log(10**17)) # true values
+singleTraj(
+ sysSM, [0.354, 0.654, 1.278, 0.983, 0.131], h=0.5, tend=math.log(10 ** 17)
+) # true values
diff --git a/tests/misc/sys_atexit.py b/tests/misc/sys_atexit.py
index f5317953c..e9c5693f9 100644
--- a/tests/misc/sys_atexit.py
+++ b/tests/misc/sys_atexit.py
@@ -1,17 +1,20 @@
# test sys.atexit() function
import sys
+
try:
sys.atexit
except AttributeError:
- print('SKIP')
+ print("SKIP")
raise SystemExit
some_var = None
+
def do_at_exit():
print("done at exit:", some_var)
+
sys.atexit(do_at_exit)
some_var = "ok"
diff --git a/tests/misc/sys_exc_info.py b/tests/misc/sys_exc_info.py
index bf9438e46..d7e8a2d94 100644
--- a/tests/misc/sys_exc_info.py
+++ b/tests/misc/sys_exc_info.py
@@ -1,15 +1,18 @@
import sys
+
try:
sys.exc_info
except:
print("SKIP")
raise SystemExit
+
def f():
print(sys.exc_info()[0:2])
+
try:
- raise ValueError('value', 123)
+ raise ValueError("value", 123)
except:
print(sys.exc_info()[0:2])
f()
diff --git a/tests/misc/sys_settrace_features.py b/tests/misc/sys_settrace_features.py
index 932e430de..a12304489 100644
--- a/tests/misc/sys_settrace_features.py
+++ b/tests/misc/sys_settrace_features.py
@@ -6,83 +6,100 @@ except AttributeError:
print("SKIP")
raise SystemExit
+
def print_stacktrace(frame, level=0):
# Ignore CPython specific helpers.
- if frame.f_globals['__name__'].find('importlib') != -1:
+ if frame.f_globals["__name__"].find("importlib") != -1:
print_stacktrace(frame.f_back, level)
return
- print("%2d: %s@%s:%s => %s:%d" % (
- level, " ",
- frame.f_globals['__name__'],
- frame.f_code.co_name,
- # reduce full path to some pseudo-relative
- 'misc' + ''.join(frame.f_code.co_filename.split('tests/misc')[-1:]),
- frame.f_lineno,
- ))
+ print(
+ "%2d: %s@%s:%s => %s:%d"
+ % (
+ level,
+ " ",
+ frame.f_globals["__name__"],
+ frame.f_code.co_name,
+ # reduce full path to some pseudo-relative
+ "misc" + "".join(frame.f_code.co_filename.split("tests/misc")[-1:]),
+ frame.f_lineno,
+ )
+ )
if frame.f_back:
print_stacktrace(frame.f_back, level + 1)
+
class _Prof:
- trace_count = 0;
+ trace_count = 0
def trace_tick(self, frame, event, arg):
self.trace_count += 1
print_stacktrace(frame)
+
__prof__ = _Prof()
alice_handler_set = False
+
+
def trace_tick_handler_alice(frame, event, arg):
print("### trace_handler::Alice event:", event)
__prof__.trace_tick(frame, event, arg)
return trace_tick_handler_alice
+
bob_handler_set = False
+
+
def trace_tick_handler_bob(frame, event, arg):
print("### trace_handler::Bob event:", event)
__prof__.trace_tick(frame, event, arg)
return trace_tick_handler_bob
+
def trace_tick_handler(frame, event, arg):
# Ignore CPython specific helpers.
- if frame.f_globals['__name__'].find('importlib') != -1:
+ if frame.f_globals["__name__"].find("importlib") != -1:
return
print("### trace_handler::main event:", event)
__prof__.trace_tick(frame, event, arg)
- if frame.f_code.co_name != 'factorial':
+ if frame.f_code.co_name != "factorial":
return trace_tick_handler
global alice_handler_set
- if event == 'call' and not alice_handler_set:
+ if event == "call" and not alice_handler_set:
alice_handler_set = True
return trace_tick_handler_alice
global bob_handler_set
- if event == 'call' and not bob_handler_set:
+ if event == "call" and not bob_handler_set:
bob_handler_set = True
return trace_tick_handler_bob
return trace_tick_handler
+
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
+
def do_tests():
# These commands are here to demonstrate some execution being traced.
print("Who loves the sun?")
print("Not every-", factorial(3))
from sys_settrace_subdir import trace_generic
+
trace_generic.run_tests()
return
+
sys.settrace(trace_tick_handler)
do_tests()
sys.settrace(None)
diff --git a/tests/misc/sys_settrace_generator.py b/tests/misc/sys_settrace_generator.py
index e955d6b62..4ace0f50e 100644
--- a/tests/misc/sys_settrace_generator.py
+++ b/tests/misc/sys_settrace_generator.py
@@ -8,21 +8,28 @@ except AttributeError:
print("SKIP")
raise SystemExit
+
def print_stacktrace(frame, level=0):
- print("%2d: %s@%s:%s => %s:%d" % (
- level, " ",
- frame.f_globals['__name__'],
- frame.f_code.co_name,
- # reduce full path to some pseudo-relative
- 'misc' + ''.join(frame.f_code.co_filename.split('tests/misc')[-1:]),
- frame.f_lineno,
- ))
+ print(
+ "%2d: %s@%s:%s => %s:%d"
+ % (
+ level,
+ " ",
+ frame.f_globals["__name__"],
+ frame.f_code.co_name,
+ # reduce full path to some pseudo-relative
+ "misc" + "".join(frame.f_code.co_filename.split("tests/misc")[-1:]),
+ frame.f_lineno,
+ )
+ )
if frame.f_back:
print_stacktrace(frame.f_back, level + 1)
+
trace_count = 0
+
def trace_tick_handler(frame, event, arg):
global trace_count
print("### trace_handler::main event:", event)
@@ -30,12 +37,13 @@ def trace_tick_handler(frame, event, arg):
print_stacktrace(frame)
return trace_tick_handler
+
def test_generator():
def make_gen():
- yield 1<<0
- yield 1<<1
- yield 1<<2
- return 1<<3
+ yield 1 << 0
+ yield 1 << 1
+ yield 1 << 2
+ return 1 << 3
gen = make_gen()
r = 0
@@ -56,6 +64,7 @@ def test_generator():
r += i
print(r)
+
sys.settrace(trace_tick_handler)
test_generator()
sys.settrace(None)
diff --git a/tests/misc/sys_settrace_generator.py.exp b/tests/misc/sys_settrace_generator.py.exp
index 5329cdfe7..de9d0bf1c 100644
--- a/tests/misc/sys_settrace_generator.py.exp
+++ b/tests/misc/sys_settrace_generator.py.exp
@@ -1,195 +1,195 @@
### trace_handler::main event: call
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:33
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:41
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:34
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:42
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:40
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:41
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:49
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:42
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:50
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:44
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:52
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:34
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:44
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:42
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:52
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:44
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:52
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:44
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:52
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:38
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:46
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:38
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:46
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: exception
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:48
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:50
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:58
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:51
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:59
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
test_generator 7 8
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:53
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:61
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:54
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:62
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:34
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:42
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:64
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:35
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:43
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:64
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:36
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:44
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:56
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:64
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: call
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:37
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:45
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:38
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:46
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: return
- 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:38
- 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:55
- 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:make_gen => miscmisc/sys_settrace_generator.py:46
+ 1: @__main__:test_generator => miscmisc/sys_settrace_generator.py:63
+ 2: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
### trace_handler::main event: line
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:57
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:65
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
7
### trace_handler::main event: return
- 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:57
- 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:60
+ 0: @__main__:test_generator => miscmisc/sys_settrace_generator.py:65
+ 1: @__main__:<module> => miscmisc/sys_settrace_generator.py:69
Total traces executed: 54
diff --git a/tests/misc/sys_settrace_loop.py b/tests/misc/sys_settrace_loop.py
index 9ae0f41a1..06d0dc17b 100644
--- a/tests/misc/sys_settrace_loop.py
+++ b/tests/misc/sys_settrace_loop.py
@@ -8,21 +8,28 @@ except AttributeError:
print("SKIP")
raise SystemExit
+
def print_stacktrace(frame, level=0):
- print("%2d: %s@%s:%s => %s:%d" % (
- level, " ",
- frame.f_globals['__name__'],
- frame.f_code.co_name,
- # reduce full path to some pseudo-relative
- 'misc' + ''.join(frame.f_code.co_filename.split('tests/misc')[-1:]),
- frame.f_lineno,
- ))
+ print(
+ "%2d: %s@%s:%s => %s:%d"
+ % (
+ level,
+ " ",
+ frame.f_globals["__name__"],
+ frame.f_code.co_name,
+ # reduce full path to some pseudo-relative
+ "misc" + "".join(frame.f_code.co_filename.split("tests/misc")[-1:]),
+ frame.f_lineno,
+ )
+ )
if frame.f_back:
print_stacktrace(frame.f_back, level + 1)
+
trace_count = 0
+
def trace_tick_handler(frame, event, arg):
global trace_count
print("### trace_handler::main event:", event)
@@ -30,6 +37,7 @@ def trace_tick_handler(frame, event, arg):
print_stacktrace(frame)
return trace_tick_handler
+
def test_loop():
# for loop
r = 0
@@ -45,6 +53,7 @@ def test_loop():
i += 1
print("test_while_loop", i)
+
sys.settrace(trace_tick_handler)
test_loop()
sys.settrace(None)
diff --git a/tests/misc/sys_settrace_loop.py.exp b/tests/misc/sys_settrace_loop.py.exp
index 3d3da5b6f..f56f98fae 100644
--- a/tests/misc/sys_settrace_loop.py.exp
+++ b/tests/misc/sys_settrace_loop.py.exp
@@ -1,72 +1,72 @@
### trace_handler::main event: call
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:33
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:41
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:35
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:43
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:36
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:37
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:36
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:37
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:36
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:37
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:36
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:37
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:38
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:46
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
test_for_loop 3
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:41
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:49
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:42
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:50
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:43
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:51
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:53
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:52
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:53
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:52
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:53
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:44
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:52
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:45
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:53
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
### trace_handler::main event: line
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:46
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:54
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
test_while_loop 3
### trace_handler::main event: return
- 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:46
- 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:49
+ 0: @__main__:test_loop => miscmisc/sys_settrace_loop.py:54
+ 1: @__main__:<module> => miscmisc/sys_settrace_loop.py:58
Total traces executed: 23
diff --git a/tests/misc/sys_settrace_subdir/trace_generic.py b/tests/misc/sys_settrace_subdir/trace_generic.py
index 3239a019c..111a9d19f 100644
--- a/tests/misc/sys_settrace_subdir/trace_generic.py
+++ b/tests/misc/sys_settrace_subdir/trace_generic.py
@@ -7,14 +7,15 @@ def test_func():
test_sub_func()
+
# closure
def test_closure(msg):
-
def make_closure():
print(msg)
return make_closure
+
# exception
def test_exception():
try:
@@ -22,41 +23,49 @@ def test_exception():
except Exception:
pass
-
+
finally:
pass
+
# listcomp
def test_listcomp():
print("test_listcomp", [x for x in range(3)])
+
# lambda
def test_lambda():
func_obj_1 = lambda a, b: a + b
print(func_obj_1(10, 20))
+
# import
def test_import():
from sys_settrace_subdir import trace_importme
+
trace_importme.dummy()
trace_importme.saysomething()
+
# class
-class TLClass():
+class TLClass:
def method():
pass
+
pass
+
def test_class():
class TestClass:
__anynum = -9
+
def method(self):
print("test_class_method")
self.__anynum += 1
-
+
def prprty_getter(self):
return self.__anynum
-
+
def prprty_setter(self, what):
self.__anynum = what
@@ -79,4 +88,5 @@ def run_tests():
test_class()
test_import()
+
print("And it's done!")
diff --git a/tests/misc/sys_settrace_subdir/trace_importme.py b/tests/misc/sys_settrace_subdir/trace_importme.py
index 0ff7c6d5b..de561ef21 100644
--- a/tests/misc/sys_settrace_subdir/trace_importme.py
+++ b/tests/misc/sys_settrace_subdir/trace_importme.py
@@ -3,7 +3,7 @@ print("Yep, I got imported.")
try:
x = const(1)
except NameError:
- print('const not defined')
+ print("const not defined")
const = lambda x: x
@@ -12,13 +12,17 @@ _CNT02 = const(123)
A123 = const(123)
a123 = const(123)
+
def dummy():
return False
+
def saysomething():
print("There, I said it.")
+
def neverexecuted():
print("Never got here!")
+
print("Yep, got here")