tests/extmod: Add test for the precision of utime functions.
According to documentation time() has a precision of at least 1 second. This test runs for 2.5 seconds and calls all utime functions every 100ms. Then it checks if they returned enough different results. All functions with sub-second precision will return ~25 results. This test passes with 15 results or more. Functions that do not exist are skipped silently.
This commit is contained in:
parent
769e822f19
commit
419134bea4
65
tests/extmod/utime_res.py
Normal file
65
tests/extmod/utime_res.py
Normal file
@ -0,0 +1,65 @@
|
||||
# test utime resolutions
|
||||
|
||||
try:
|
||||
import utime
|
||||
except ImportError:
|
||||
print("SKIP")
|
||||
raise SystemExit
|
||||
|
||||
|
||||
def gmtime_time():
|
||||
return utime.gmtime(utime.time())
|
||||
|
||||
|
||||
def localtime_time():
|
||||
return utime.localtime(utime.time())
|
||||
|
||||
|
||||
def test():
|
||||
TEST_TIME = 2500
|
||||
EXPECTED_MAP = (
|
||||
# (function name, min. number of results in 2.5 sec)
|
||||
("time", 3),
|
||||
("gmtime", 3),
|
||||
("localtime", 3),
|
||||
("gmtime_time", 3),
|
||||
("localtime_time", 3),
|
||||
("ticks_ms", 15),
|
||||
("ticks_us", 15),
|
||||
("ticks_ns", 15),
|
||||
("ticks_cpu", 15),
|
||||
)
|
||||
|
||||
# call time functions
|
||||
results_map = {}
|
||||
end_time = utime.ticks_ms() + TEST_TIME
|
||||
while utime.ticks_diff(end_time, utime.ticks_ms()) > 0:
|
||||
utime.sleep_ms(100)
|
||||
for func_name, _ in EXPECTED_MAP:
|
||||
try:
|
||||
time_func = getattr(utime, func_name, None) or globals()[func_name]
|
||||
now = time_func() # may raise AttributeError
|
||||
except (KeyError, AttributeError):
|
||||
continue
|
||||
try:
|
||||
results_map[func_name].add(now)
|
||||
except KeyError:
|
||||
results_map[func_name] = {now}
|
||||
|
||||
# check results
|
||||
for func_name, min_len in EXPECTED_MAP:
|
||||
print("Testing %s" % func_name)
|
||||
results = results_map.get(func_name)
|
||||
if results is None:
|
||||
pass
|
||||
elif func_name == "ticks_cpu" and results == {0}:
|
||||
# ticks_cpu() returns 0 on some ports (e.g. unix)
|
||||
pass
|
||||
elif len(results) < min_len:
|
||||
print(
|
||||
"%s() returns %s result%s in %s ms, expecting >= %s"
|
||||
% (func_name, len(results), "s"[: len(results) != 1], TEST_TIME, min_len)
|
||||
)
|
||||
|
||||
|
||||
test()
|
9
tests/extmod/utime_res.py.exp
Normal file
9
tests/extmod/utime_res.py.exp
Normal file
@ -0,0 +1,9 @@
|
||||
Testing time
|
||||
Testing gmtime
|
||||
Testing localtime
|
||||
Testing gmtime_time
|
||||
Testing localtime_time
|
||||
Testing ticks_ms
|
||||
Testing ticks_us
|
||||
Testing ticks_ns
|
||||
Testing ticks_cpu
|
Loading…
Reference in New Issue
Block a user