summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/micropython/schedule.py61
-rw-r--r--tests/micropython/schedule.py.exp4
-rwxr-xr-xtests/run-tests1
3 files changed, 66 insertions, 0 deletions
diff --git a/tests/micropython/schedule.py b/tests/micropython/schedule.py
new file mode 100644
index 000000000..3d584eea4
--- /dev/null
+++ b/tests/micropython/schedule.py
@@ -0,0 +1,61 @@
+# test micropython.schedule() function
+
+import micropython
+
+try:
+ micropython.schedule
+except AttributeError:
+ print('SKIP')
+ import sys
+ sys.exit()
+
+# Basic test of scheduling a function.
+
+def callback(arg):
+ global done
+ print(arg)
+ done = True
+
+done = False
+micropython.schedule(callback, 1)
+while not done:
+ pass
+
+# Test that callbacks can be scheduled from within a callback, but
+# that they don't execute until the outer callback is finished.
+
+def callback_inner(arg):
+ global done
+ print('inner')
+ done += 1
+
+def callback_outer(arg):
+ global done
+ micropython.schedule(callback_inner, 0)
+ # need a loop so that the VM can check for pending events
+ for i in range(2):
+ pass
+ print('outer')
+ done += 1
+
+done = 0
+micropython.schedule(callback_outer, 0)
+while done != 2:
+ pass
+
+# Test that scheduling too many callbacks leads to an exception. To do this we
+# must schedule from within a callback to guarantee that the scheduler is locked.
+
+def callback(arg):
+ global done
+ try:
+ for i in range(100):
+ micropython.schedule(lambda x:x, None)
+ except RuntimeError:
+ print('RuntimeError')
+ done = True
+
+done = False
+micropython.schedule(callback, None)
+while not done:
+ pass
diff --git a/tests/micropython/schedule.py.exp b/tests/micropython/schedule.py.exp
new file mode 100644
index 000000000..c4a3e1227
--- /dev/null
+++ b/tests/micropython/schedule.py.exp
@@ -0,0 +1,4 @@
+1
+outer
+inner
+RuntimeError
diff --git a/tests/run-tests b/tests/run-tests
index b1bb7dd84..e8dc2ba58 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -319,6 +319,7 @@ def run_tests(pyb, tests, args):
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
+ skip_tests.add('micropython/schedule.py') # native code doesn't check pending events
for test_file in tests:
test_file = test_file.replace('\\', '/')