Author: Antonio Cuni <[email protected]>
Branch:
Changeset: r44801:1de890798fa6
Date: 2011-06-07 16:32 +0200
http://bitbucket.org/pypy/pypy/changeset/1de890798fa6/
Log: move tests about exceptions into their own file
diff --git a/pypy/module/pypyjit/test_pypy_c/test_exception.py
b/pypy/module/pypyjit/test_pypy_c/test_exception.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/pypyjit/test_pypy_c/test_exception.py
@@ -0,0 +1,93 @@
+import py
+from pypy.module.pypyjit.test_pypy_c.test_model import BaseTestPyPyC
+
+class TestException(BaseTestPyPyC):
+
+ def test_cmp_exc(self):
+ def f1(n):
+ # So we don't get a LOAD_GLOBAL op
+ KE = KeyError
+ i = 0
+ while i < n:
+ try:
+ raise KE
+ except KE: # ID: except
+ i += 1
+ return i
+
+ log = self.run(f1, [10000])
+ assert log.result == 10000
+ loop, = log.loops_by_id("except")
+ ops = list(loop.ops_by_id("except", opcode="COMPARE_OP"))
+ assert ops == []
+
+ def test_exception_inside_loop_1(self):
+ def main(n):
+ while n:
+ try:
+ raise ValueError
+ except ValueError:
+ pass
+ n -= 1
+ return n
+ #
+ log = self.run(main, [1000])
+ assert log.result == 0
+ loop, = log.loops_by_filename(self.filepath)
+ assert loop.match("""
+ i5 = int_is_true(i3)
+ guard_true(i5, descr=<Guard3>)
+ guard_not_invalidated(descr=<Guard4>)
+ --EXC-TICK--
+ i12 = int_sub_ovf(i3, 1)
+ guard_no_overflow(descr=<Guard6>)
+ --TICK--
+ jump(..., descr=<Loop0>)
+ """)
+
+ def test_exception_inside_loop_2(self):
+ def main(n):
+ def g(n):
+ raise ValueError(n) # ID: raise
+ def f(n):
+ g(n)
+ #
+ while n:
+ try:
+ f(n)
+ except ValueError:
+ pass
+ n -= 1
+ return n
+ #
+ log = self.run(main, [1000])
+ assert log.result == 0
+ loop, = log.loops_by_filename(self.filepath)
+ ops = log.opnames(loop.ops_by_id('raise'))
+ assert 'new' not in ops
+
+ def test_reraise(self):
+ def f(n):
+ i = 0
+ while i < n:
+ try:
+ try:
+ raise KeyError
+ except KeyError:
+ raise
+ except KeyError:
+ i += 1
+ return i
+
+ log = self.run(f, [100000])
+ assert log.result == 100000
+ loop, = log.loops_by_filename(self.filepath)
+ assert loop.match("""
+ i7 = int_lt(i4, i5)
+ guard_true(i7, descr=<Guard3>)
+ guard_not_invalidated(descr=<Guard4>)
+ --EXC-TICK--
+ i14 = int_add(i4, 1)
+ --TICK--
+ jump(..., descr=<Loop0>)
+ """)
diff --git a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
--- a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
@@ -71,24 +71,6 @@
""")
- def test_cmp_exc(self):
- def f1(n):
- # So we don't get a LOAD_GLOBAL op
- KE = KeyError
- i = 0
- while i < n:
- try:
- raise KE
- except KE: # ID: except
- i += 1
- return i
-
- log = self.run(f1, [10000])
- assert log.result == 10000
- loop, = log.loops_by_id("except")
- ops = list(loop.ops_by_id("except", opcode="COMPARE_OP"))
- assert ops == []
-
def test_virtual_instance(self):
def main(n):
@@ -195,76 +177,6 @@
jump(..., descr=<Loop0>)
""")
- def test_exception_inside_loop_1(self):
- def main(n):
- while n:
- try:
- raise ValueError
- except ValueError:
- pass
- n -= 1
- return n
- #
- log = self.run(main, [1000])
- assert log.result == 0
- loop, = log.loops_by_filename(self.filepath)
- assert loop.match("""
- i5 = int_is_true(i3)
- guard_true(i5, descr=<Guard3>)
- guard_not_invalidated(descr=<Guard4>)
- --EXC-TICK--
- i12 = int_sub_ovf(i3, 1)
- guard_no_overflow(descr=<Guard6>)
- --TICK--
- jump(..., descr=<Loop0>)
- """)
-
- def test_exception_inside_loop_2(self):
- def main(n):
- def g(n):
- raise ValueError(n) # ID: raise
- def f(n):
- g(n)
- #
- while n:
- try:
- f(n)
- except ValueError:
- pass
- n -= 1
- return n
- #
- log = self.run(main, [1000])
- assert log.result == 0
- loop, = log.loops_by_filename(self.filepath)
- ops = log.opnames(loop.ops_by_id('raise'))
- assert 'new' not in ops
-
- def test_reraise(self):
- def f(n):
- i = 0
- while i < n:
- try:
- try:
- raise KeyError
- except KeyError:
- raise
- except KeyError:
- i += 1
- return i
-
- log = self.run(f, [100000])
- assert log.result == 100000
- loop, = log.loops_by_filename(self.filepath)
- assert loop.match("""
- i7 = int_lt(i4, i5)
- guard_true(i7, descr=<Guard3>)
- guard_not_invalidated(descr=<Guard4>)
- --EXC-TICK--
- i14 = int_add(i4, 1)
- --TICK--
- jump(..., descr=<Loop0>)
- """)
def test_chain_of_guards(self):
src = """
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit