diff --git a/tests/micropython/heapalloc_iter.py b/tests/micropython/heapalloc_iter.py
new file mode 100644
index 0000000000000000000000000000000000000000..3315d78c38f9444db438c7e31be3a53da689ab3c
--- /dev/null
+++ b/tests/micropython/heapalloc_iter.py
@@ -0,0 +1,49 @@
+# test that iterating doesn't use the heap
+
+try:
+    from micropython import heap_lock, heap_unlock
+except (ImportError, AttributeError):
+    heap_lock = heap_unlock = lambda:0
+import array
+
+def do_iter(l):
+    for i in l:
+        print(i)
+
+def gen_func():
+    yield 1
+    yield 2
+
+# pre-create collections to iterate over
+ba = bytearray(b'123')
+ar = array.array('H', (123, 456))
+t = (1, 2, 3)
+l = [1, 2]
+d = {1:2}
+s = {1}
+fs = frozenset((1,))
+g1 = (100 + x for x in range(2))
+g2 = gen_func()
+
+# test certain builtins with the heap locked
+heap_lock()
+print(all(t))
+print(any(t))
+print(min(t))
+print(max(t))
+print(sum(t))
+heap_unlock()
+
+# test iterating over collections with the heap locked
+heap_lock()
+do_iter(b'123')
+do_iter(ba)
+do_iter(ar)
+do_iter(t)
+do_iter(l)
+do_iter(d)
+do_iter(s)
+do_iter(fs)
+do_iter(g1)
+do_iter(g2)
+heap_unlock()
diff --git a/tests/run-tests b/tests/run-tests
index 4bebe8d47fe518ddc7648fa2bdaa680b4447ea88..6cca829b67040a3d51cf3c1bbb8eeaaa2b50ad59 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -312,6 +312,7 @@ def run_tests(pyb, tests, args):
         skip_tests.add('misc/print_exception.py') # because native doesn't have proper traceback info
         skip_tests.add('misc/sys_exc_info.py') # sys.exc_info() is not supported for native
         skip_tests.add('micropython/heapalloc_traceback.py') # because native doesn't have proper traceback info
+        skip_tests.add('micropython/heapalloc_iter.py') # requires generators
 
     for test_file in tests:
         test_file = test_file.replace('\\', '/')