diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-30 23:14:55 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-30 23:30:16 +0300 |
commit | f39d3b93da4b9205a095430e12472051c6b22ef6 (patch) | |
tree | b2f56443f9646bef8035b4a527f1d1f533e6196e /tests | |
parent | a30cf9f3aff671ada1c84a1977ecf96d473d7256 (diff) | |
download | micropython-f39d3b93da4b9205a095430e12472051c6b22ef6.tar.gz micropython-f39d3b93da4b9205a095430e12472051c6b22ef6.zip |
py: Implement support for generalized generator protocol.
Iterators and ducktype objects can now be arguments of yield from.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/basics/gen-yield-from-ducktype.py | 44 | ||||
-rw-r--r-- | tests/basics/gen-yield-from-iter.py | 8 |
2 files changed, 52 insertions, 0 deletions
diff --git a/tests/basics/gen-yield-from-ducktype.py b/tests/basics/gen-yield-from-ducktype.py new file mode 100644 index 0000000000..aa0109c914 --- /dev/null +++ b/tests/basics/gen-yield-from-ducktype.py @@ -0,0 +1,44 @@ +class MyGen: + + def __init__(self): + self.v = 0 + + def __iter__(self): + return self + + def __next__(self): + self.v += 1 + if self.v > 5: + raise StopIteration + return self.v + +def gen(): + yield from MyGen() + +def gen2(): + yield from gen() + +print(list(gen())) +print(list(gen2())) + + +class Incrementer: + + def __iter__(self): + return self + + def __next__(self): + return self.send(None) + + def send(self, val): + if val is None: + return "Incrementer initialized" + return val + 1 + +def gen3(): + yield from Incrementer() + +g = gen3() +print(next(g)) +print(g.send(5)) +print(g.send(100)) diff --git a/tests/basics/gen-yield-from-iter.py b/tests/basics/gen-yield-from-iter.py new file mode 100644 index 0000000000..2d06328fbb --- /dev/null +++ b/tests/basics/gen-yield-from-iter.py @@ -0,0 +1,8 @@ +def gen(): + yield from (1, 2, 3) + +def gen2(): + yield from gen() + +print(list(gen())) +print(list(gen2())) |