From 531c206e8b2e4d1af735af473c2fdeb8c1b36247 Mon Sep 17 00:00:00 2001 From: Rami Ali Date: Wed, 21 Dec 2016 14:47:02 +1100 Subject: [PATCH] tests: Add tests to improve coverage of runtime.c. --- tests/basics/gen_yield_from_close.py | 22 ++++++++++++++++++++++ tests/basics/int_big_add.py | 11 +++++++++++ tests/basics/iter1.py | 9 +++++++++ tests/basics/try2.py | 9 +++++++++ tests/float/complex1.py | 6 ++++++ tests/float/float1.py | 6 ++++++ 6 files changed, 63 insertions(+) create mode 100644 tests/basics/int_big_add.py diff --git a/tests/basics/gen_yield_from_close.py b/tests/basics/gen_yield_from_close.py index 674e117a08..d66691ff9c 100644 --- a/tests/basics/gen_yield_from_close.py +++ b/tests/basics/gen_yield_from_close.py @@ -99,3 +99,25 @@ try: g.close() except RuntimeError: print('RuntimeError') + +# case where close is propagated up to a built-in iterator +def gen8(): + g = reversed([2, 1]) + yield from g +g = gen8() +print(next(g)) +g.close() + +# case with a user-defined close method +class Iter: + def __iter__(self): + return self + def __next__(self): + return 1 + def close(self): + print('close') +def gen9(): + yield from Iter() +g = gen9() +print(next(g)) +g.close() diff --git a/tests/basics/int_big_add.py b/tests/basics/int_big_add.py new file mode 100644 index 0000000000..f0c3336d05 --- /dev/null +++ b/tests/basics/int_big_add.py @@ -0,0 +1,11 @@ +# tests transition from small to large int representation by addition + +# 31-bit overflow +i = 0x3fffffff +print(i + i) +print(-i + -i) + +# 63-bit overflow +i = 0x3fffffffffffffff +print(i + i) +print(-i + -i) diff --git a/tests/basics/iter1.py b/tests/basics/iter1.py index 5bd7f5090b..9117dfd2b7 100644 --- a/tests/basics/iter1.py +++ b/tests/basics/iter1.py @@ -9,6 +9,15 @@ try: except TypeError: print('TypeError') +# this class has no __next__ implementation +class NotIterable: + def __iter__(self): + return self +try: + print(all(NotIterable())) +except TypeError: + print('TypeError') + class MyStopIteration(StopIteration): pass diff --git a/tests/basics/try2.py b/tests/basics/try2.py index 5827699e90..11e60b3c22 100644 --- a/tests/basics/try2.py +++ b/tests/basics/try2.py @@ -22,6 +22,15 @@ try: except NameError: print("except 1") +# raised exception not contained in except tuple +try: + try: + raise Exception + except (RuntimeError, SyntaxError): + print('except 2') +except Exception: + print('except 1') + # Check that exceptions across function boundaries work as expected def func1(): try: diff --git a/tests/float/complex1.py b/tests/float/complex1.py index ebe4b0f37c..027d12583c 100644 --- a/tests/float/complex1.py +++ b/tests/float/complex1.py @@ -75,6 +75,12 @@ try: except TypeError: print("TypeError") +#small int on LHS, complex on RHS, unsupported op +try: + print(1 | 1j) +except TypeError: + print('TypeError') + # zero division try: 1j / 0 diff --git a/tests/float/float1.py b/tests/float/float1.py index f21f5bcdd3..0e115032b6 100644 --- a/tests/float/float1.py +++ b/tests/float/float1.py @@ -87,6 +87,12 @@ try: except TypeError: print("TypeError") +# small int on LHS, float on RHS, unsupported op +try: + print(1 | 1.0) +except TypeError: + print('TypeError') + # can't convert list to float try: float([])