tests/micropython: Add tests for micropython.schedule().
This commit is contained in:
parent
9ee4641850
commit
c772817dee
61
tests/micropython/schedule.py
Normal file
61
tests/micropython/schedule.py
Normal 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
|
4
tests/micropython/schedule.py.exp
Normal file
4
tests/micropython/schedule.py.exp
Normal file
@ -0,0 +1,4 @@
|
||||
1
|
||||
outer
|
||||
inner
|
||||
RuntimeError
|
@ -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('\\', '/')
|
||||
|
Loading…
Reference in New Issue
Block a user