summaryrefslogtreecommitdiff
path: root/tests/micropython/heapalloc_yield_from.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-12-22 23:47:15 +1100
committerDamien George <damien.p.george@gmail.com>2019-12-27 12:34:22 +1100
commitde8c04317be76222d2fbe7c5bf50ffd5ff2fd140 (patch)
treeae5712cfabbe27cfc0b1dc858506689e849ce140 /tests/micropython/heapalloc_yield_from.py
parentaacd61893952af24049fd64f3735551ff9fc14ea (diff)
tests/micropython: Add test for yield-from while heap is locked.
Diffstat (limited to 'tests/micropython/heapalloc_yield_from.py')
-rw-r--r--tests/micropython/heapalloc_yield_from.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/micropython/heapalloc_yield_from.py b/tests/micropython/heapalloc_yield_from.py
new file mode 100644
index 000000000..8443210f3
--- /dev/null
+++ b/tests/micropython/heapalloc_yield_from.py
@@ -0,0 +1,31 @@
+# Check that yield-from can work without heap allocation
+
+import micropython
+
+# Yielding from a function generator
+def sub_gen(a):
+ for i in range(a):
+ yield i
+def gen(g):
+ yield from g
+g = gen(sub_gen(4))
+micropython.heap_lock()
+print(next(g))
+print(next(g))
+micropython.heap_unlock()
+
+# Yielding from a user iterator
+class G:
+ def __init__(self):
+ self.value = 0
+ def __iter__(self):
+ return self
+ def __next__(self):
+ v = self.value
+ self.value += 1
+ return v
+g = gen(G())
+micropython.heap_lock()
+print(next(g))
+print(next(g))
+micropython.heap_unlock()