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

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_exact('2')
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))