diff options
author | Damien George <damien.p.george@gmail.com> | 2017-03-16 18:05:00 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2017-03-20 15:20:26 +1100 |
commit | c772817deea6f3e5fe63483db77a98b65974d833 (patch) | |
tree | 4972f1fdac30fbf8e1e88be70de6470a0d99e8f1 /tests/micropython/schedule.py | |
parent | 9ee464185064b287bc1b0ff42e1b81214d808e7a (diff) |
tests/micropython: Add tests for micropython.schedule().
Diffstat (limited to 'tests/micropython/schedule.py')
-rw-r--r-- | tests/micropython/schedule.py | 61 |
1 files changed, 61 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 |