1# test utime resolutions
2
3try:
4    import utime
5except ImportError:
6    print("SKIP")
7    raise SystemExit
8
9
10def gmtime_time():
11    return utime.gmtime(utime.time())
12
13
14def localtime_time():
15    return utime.localtime(utime.time())
16
17
18def test():
19    TEST_TIME = 2500
20    EXPECTED_MAP = (
21        # (function name, min. number of results in 2.5 sec)
22        ("time", 3),
23        ("gmtime", 3),
24        ("localtime", 3),
25        ("gmtime_time", 3),
26        ("localtime_time", 3),
27        ("ticks_ms", 15),
28        ("ticks_us", 15),
29        ("ticks_ns", 15),
30        ("ticks_cpu", 15),
31    )
32
33    # call time functions
34    results_map = {}
35    end_time = utime.ticks_ms() + TEST_TIME
36    while utime.ticks_diff(end_time, utime.ticks_ms()) > 0:
37        utime.sleep_ms(100)
38        for func_name, _ in EXPECTED_MAP:
39            try:
40                time_func = getattr(utime, func_name, None) or globals()[func_name]
41                now = time_func()  # may raise AttributeError
42            except (KeyError, AttributeError):
43                continue
44            try:
45                results_map[func_name].add(now)
46            except KeyError:
47                results_map[func_name] = {now}
48
49    # check results
50    for func_name, min_len in EXPECTED_MAP:
51        print("Testing %s" % func_name)
52        results = results_map.get(func_name)
53        if results is None:
54            pass
55        elif func_name == "ticks_cpu" and results == {0}:
56            # ticks_cpu() returns 0 on some ports (e.g. unix)
57            pass
58        elif len(results) < min_len:
59            print(
60                "%s() returns %s result%s in %s ms, expecting >= %s"
61                % (func_name, len(results), "s"[: len(results) != 1], TEST_TIME, min_len)
62            )
63
64
65test()
66