tests/micropython: Add tests for micropython.schedule().

This commit is contained in:
Damien George 2017-03-16 18:05:00 +11:00
parent 9ee4641850
commit c772817dee
3 changed files with 66 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,4 @@
1
outer
inner
RuntimeError

View File

@ -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('\\', '/')