1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/examples/micropython/tests/01-run.py
Martine Lenders 5599b067ab
examples/micropython: fix checked PID
With https://github.com/RIOT-OS/RIOT/pull/14224 the idle thread became
optional, so the main thread can have either 1 or 2 as PID, depending
if the idle thread is included or not. As this might also change in the
future, it is probably the best to just expect any number.
2020-07-15 12:43:02 +02:00

85 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
from testrunner import run
def testfunc(child):
def get_time():
child.sendline('utime.time()')
child.readline()
res = int(child.readline().rstrip())
child.expect_exact('>>>')
return res
child.expect_exact('boot.py: MicroPython says hello!')
child.expect_exact('>>>')
child.sendline('print("echo this! " * 4)')
child.expect_exact('echo this! echo this! echo this! echo this!')
child.expect_exact('>>>')
# test riot.thread_getpid()
child.sendline('import riot')
child.sendline('print(riot.thread_getpid())')
child.expect(r'\d+')
child.expect_exact('>>>')
#
# test xtimer integration
#
child.sendline('import utime')
child.expect_exact('>>>')
# testing timing over serial using the REPL is very inaccurate, thus
# we allow a *large* overshoot (100 by default).
def test_sleep(t, slack=100):
before = get_time()
child.sendline('utime.sleep_ms(%s)' % t)
child.expect_exact('>>>')
duration = get_time() - before
print("test_sleep(%s, %s): slept %sms" % (t, slack, duration))
assert duration > t and duration < (t + slack)
return duration
# get overhead from sleeping 0ms, add 10 percent
slack = int(test_sleep(0, 1000) * 1.1)
test_sleep(50, slack)
test_sleep(250, slack)
test_sleep(500, slack)
# test setting timers
child.sendline('import xtimer')
child.expect_exact('>>>')
child.sendline('a = 0')
child.expect_exact('>>>')
child.sendline('def inc_a(): global a; a+=1')
child.expect_exact('...')
child.sendline('')
child.expect_exact('>>>')
child.sendline('t = xtimer.xtimer(inc_a)')
child.expect_exact('>>>')
before = get_time()
child.sendline('t.set(500000)')
child.expect_exact('>>>')
child.sendline('while a==0: pass')
child.expect_exact('...')
child.sendline('')
child.expect_exact('>>>')
duration = get_time() - before
assert duration > 500
print("[TEST PASSED]")
if __name__ == "__main__":
sys.exit(run(testfunc))