summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-04-03 16:14:25 +0100
committerDamien George <damien.p.george@gmail.com>2015-04-03 16:14:25 +0100
commit82f37bf0d1080b4f508a6af36088cbe12b50c70b (patch)
treee83996cc44b3a25c1f65662faa42116764e391ef
parentfa5950eb00b92c805a073323c7dd3f52072c8b4c (diff)
downloadmicropython-82f37bf0d1080b4f508a6af36088cbe12b50c70b.tar.gz
micropython-82f37bf0d1080b4f508a6af36088cbe12b50c70b.zip
tests: Add specific test for closures in native emitter.
-rw-r--r--tests/micropython/native_closure.py32
-rw-r--r--tests/micropython/native_closure.py.exp3
2 files changed, 35 insertions, 0 deletions
diff --git a/tests/micropython/native_closure.py b/tests/micropython/native_closure.py
new file mode 100644
index 0000000000..6c0592e52d
--- /dev/null
+++ b/tests/micropython/native_closure.py
@@ -0,0 +1,32 @@
+# test native emitter can handle closures correctly
+
+# basic closure
+@micropython.native
+def f():
+ x = 1
+ @micropython.native
+ def g():
+ nonlocal x
+ return x
+ return g
+print(f()())
+
+# closing over an argument
+@micropython.native
+def f(x):
+ @micropython.native
+ def g():
+ nonlocal x
+ return x
+ return g
+print(f(2)())
+
+# closing over an argument and a normal local
+@micropython.native
+def f(x):
+ y = 2 * x
+ @micropython.native
+ def g(z):
+ return x + y + z
+ return g
+print(f(2)(3))
diff --git a/tests/micropython/native_closure.py.exp b/tests/micropython/native_closure.py.exp
new file mode 100644
index 0000000000..7f4277240f
--- /dev/null
+++ b/tests/micropython/native_closure.py.exp
@@ -0,0 +1,3 @@
+1
+2
+9