summaryrefslogtreecommitdiff
path: root/tests/micropython/viper_misc.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-10-05 22:27:12 +0100
committerDamien George <damien.p.george@gmail.com>2014-10-05 22:27:12 +0100
commit5a04e2cca8255c2d4a1218d6ac0b38e67306206b (patch)
treeb70ec6a20f17b7282828268725eb4faf915493e6 /tests/micropython/viper_misc.py
parent854c8c015303d709d3b33f5897dbeff0c10bee9d (diff)
tests: Add check for micropython.native and then skip relevant tests.
If micropython.native decorator doesn't compile, then we skill all native/viper tests. This patch also re-enables the ujson_loads test on NT. Addresses issue #861, and partially addresses issue #856.
Diffstat (limited to 'tests/micropython/viper_misc.py')
-rw-r--r--tests/micropython/viper_misc.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/micropython/viper_misc.py b/tests/micropython/viper_misc.py
new file mode 100644
index 000000000..7e6ed67d4
--- /dev/null
+++ b/tests/micropython/viper_misc.py
@@ -0,0 +1,90 @@
+import micropython
+
+# viper function taking and returning ints
+@micropython.viper
+def viper_int(x:int, y:int) -> int:
+ return x + y + 3
+print(viper_int(1, 2))
+
+# viper function taking and returning objects
+@micropython.viper
+def viper_object(x:object, y:object) -> object:
+ return x + y
+print(viper_object(1, 2))
+
+# a local (should have automatic type int)
+@micropython.viper
+def viper_local(x:int) -> int:
+ y = 4
+ return x + y
+print(viper_local(3))
+
+# without type annotation, types should default to object
+@micropython.viper
+def viper_no_annotation(x, y):
+ return x * y
+print(viper_no_annotation(4, 5))
+
+# a for loop
+@micropython.viper
+def viper_for(a:int, b:int) -> int:
+ total = 0
+ for x in range(a, b):
+ total += x
+ return total
+print(viper_for(10, 10000))
+
+# accessing a global
+@micropython.viper
+def viper_access_global():
+ global gl
+ gl = 1
+ return gl
+print(viper_access_global(), gl)
+
+# calling print with object and int types
+@micropython.viper
+def viper_print(x, y:int):
+ print(x, y + 1)
+viper_print(1, 2)
+
+# making a tuple from an object and an int
+@micropython.viper
+def viper_tuple(x, y:int):
+ return (x, y + 1)
+print(viper_tuple(1, 2))
+
+# making a list from an object and an int
+@micropython.viper
+def viper_list(x, y:int):
+ return [x, y + 1]
+print(viper_list(1, 2))
+
+# making a set from an object and an int
+@micropython.viper
+def viper_set(x, y:int):
+ return {x, y + 1}
+print(sorted(list(viper_set(1, 2))))
+
+# raising an exception
+@micropython.viper
+def viper_raise(x:int):
+ raise SystemError(x)
+try:
+ viper_raise(1)
+except SystemError as e:
+ print(repr(e))
+
+# this doesn't work at the moment
+#@micropython.viper
+#def g() -> uint:
+# return -1
+
+# calling GC after defining the function
+@micropython.viper
+def viper_gc() -> int:
+ return 1
+print(viper_gc())
+import gc
+gc.collect()
+print(viper_gc())