diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-23 21:48:29 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-26 15:40:58 +0200 |
commit | 962b1cd1b120d777636ce8195d14f3d686e96619 (patch) | |
tree | ba8b703fb70d32457e8f2cbeb176ec7b822cfa9f /tests | |
parent | 4b2b7ceca7915d014a191d3776bc29bdbc5faf02 (diff) | |
download | micropython-962b1cd1b120d777636ce8195d14f3d686e96619.tar.gz micropython-962b1cd1b120d777636ce8195d14f3d686e96619.zip |
objgenerator: Implement return with value and .close() method.
Return with value gets converted to StopIteration(value). Implementation
keeps optimizing against creating of possibly unneeded exception objects,
so there're considerable refactoring to implement these features.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/basics/generator-return.py | 10 | ||||
-rw-r--r-- | tests/basics/generator_close.py | 59 |
2 files changed, 69 insertions, 0 deletions
diff --git a/tests/basics/generator-return.py b/tests/basics/generator-return.py new file mode 100644 index 0000000000..a3ac88575e --- /dev/null +++ b/tests/basics/generator-return.py @@ -0,0 +1,10 @@ +def gen(): + yield 1 + return 42 + +g = gen() +print(next(g)) +try: + print(next(g)) +except StopIteration as e: + print(repr(e)) diff --git a/tests/basics/generator_close.py b/tests/basics/generator_close.py new file mode 100644 index 0000000000..aa563f2a8a --- /dev/null +++ b/tests/basics/generator_close.py @@ -0,0 +1,59 @@ +def gen1(): + yield 1 + yield 2 + +# Test that it's possible to close just created gen +g = gen1() +print(g.close()) +try: + next(g) +except StopIteration: + print("StopIteration") + +# Test that it's possible to close gen in progress +g = gen1() +print(next(g)) +print(g.close()) +try: + next(g) + print("No StopIteration") +except StopIteration: + print("StopIteration") + +# Test that it's possible to close finished gen +g = gen1() +print(list(g)) +print(g.close()) +try: + next(g) + print("No StopIteration") +except StopIteration: + print("StopIteration") + + +# Throwing StopIteration in response to close() is ok +def gen2(): + try: + yield 1 + yield 2 + except: + raise StopIteration + +g = gen2() +next(g) +print(g.close()) + +# Any other exception is propagated to the .close() caller +def gen3(): + try: + yield 1 + yield 2 + except: + raise ValueError + +g = gen3() +next(g) +try: + print(g.close()) +except ValueError: + print("ValueError") |