diff options
| author | David Lechner | 2020-03-22 21:26:08 -0500 |
|---|---|---|
| committer | Damien George | 2020-03-30 13:21:58 +1100 |
| commit | 3dc324d3f1312e40d3a8ed87e7244966bb756f26 (patch) | |
| tree | 94ff44f8eabba0039582c245b901173597edd11e /tests/misc | |
| parent | 488613bca6c460340ed2995ae5cafafe22d0bfff (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.py | 234 | ||||
| -rw-r--r-- | tests/misc/non_compliant.py | 80 | ||||
| -rw-r--r-- | tests/misc/non_compliant_lexer.py | 24 | ||||
| -rw-r--r-- | tests/misc/print_exception.py | 32 | ||||
| -rw-r--r-- | tests/misc/rge_sm.py | 71 | ||||
| -rw-r--r-- | tests/misc/sys_atexit.py | 5 | ||||
| -rw-r--r-- | tests/misc/sys_exc_info.py | 5 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_features.py | 45 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_generator.py | 33 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_generator.py.exp | 276 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_loop.py | 25 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_loop.py.exp | 92 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_subdir/trace_generic.py | 20 | ||||
| -rw-r--r-- | tests/misc/sys_settrace_subdir/trace_importme.py | 6 |
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") |
