summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ports/rp2/rp2_machine_idle.py36
-rw-r--r--tests/ports/rp2/rp2_machine_idle.py.exp1
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/ports/rp2/rp2_machine_idle.py b/tests/ports/rp2/rp2_machine_idle.py
new file mode 100644
index 000000000..f9c282847
--- /dev/null
+++ b/tests/ports/rp2/rp2_machine_idle.py
@@ -0,0 +1,36 @@
+import machine
+import time
+
+# Verify that machine.idle() resumes execution within 0.1 and 1.1ms (should be
+# 1ms max but allowing for some overhead).
+#
+# (A minimum sleep time for machine.idle() isn't specified but in a system like
+# this with no active interrupts then we should expect some idle time before
+# resuming. If it's consistently resuming immediately then that indicates a bug
+# is preventing proper idle.)
+#
+# This test doesn't contain any rp2-specific code, but rp2 is currently the only
+# tickless port - which is what led to the bug this is a regression test for.
+# Some other ports (unix, esp32) have idle behaviour that resumes immediately on
+# a quiet system, so this test is also less useful for those.
+#
+# Verification uses the average idle time, as individual iterations will always
+# have outliers due to interrupts, scheduler, etc.
+
+ITERATIONS = 500
+total = 0
+
+for _ in range(ITERATIONS):
+ before = time.ticks_us()
+ machine.idle()
+ total += time.ticks_diff(time.ticks_us(), before)
+
+total /= 1000 # us to ms
+average = total / ITERATIONS
+
+# print(f"Total {total}ms average {average}ms") # uncomment for debug
+
+if 0.1 < average < 1.1:
+ print("PASS")
+else:
+ print(f"Total {total}ms average {average}ms, out of spec")
diff --git a/tests/ports/rp2/rp2_machine_idle.py.exp b/tests/ports/rp2/rp2_machine_idle.py.exp
new file mode 100644
index 000000000..7ef22e9a4
--- /dev/null
+++ b/tests/ports/rp2/rp2_machine_idle.py.exp
@@ -0,0 +1 @@
+PASS