diff --git a/tests/xtimer_usleep/README.md b/tests/xtimer_usleep/README.md index 6f91697c1e..d387d9ed99 100644 --- a/tests/xtimer_usleep/README.md +++ b/tests/xtimer_usleep/README.md @@ -84,3 +84,20 @@ Invalid timeout 1464 ,expected 1172 < 1234 < 1295 Host max error 61 error 291 ``` + +Test also fails with negative offset as xtimer_usleep must sleep for at least +the expected time. + +``` +XXXX-XX-XX XX:XX:XX,XXX - INFO # Connect to serial port /dev/ttyACM0 +Welcome to pyterm! +Type '/exit' to exit. +XXXX-XX-XX XX:XX:XX,XXX - INFO # main(): This is RIOT! (XXX) +XXXX-XX-XX XX:XX:XX,XXX - INFO # Running test 5 times with 7 distinct sleep times +XXXX-XX-XX XX:XX:XX,XXX - INFO # Please hit any key and then ENTER to continue +a +XXXX-XX-XX XX:XX:XX,XXX - INFO # Slept for 9979 us (expected: 10000 us) Offset: -21 us +Invalid timeout 9979 ,expected 10000 < 10500 +Host max error 500 +error -21 +``` \ No newline at end of file diff --git a/tests/xtimer_usleep/tests/01-run.py b/tests/xtimer_usleep/tests/01-run.py index 983bfcc89c..3766be750a 100755 --- a/tests/xtimer_usleep/tests/01-run.py +++ b/tests/xtimer_usleep/tests/01-run.py @@ -33,17 +33,17 @@ def testfunc(child): start_test = time.time() for m in range(RUNS): for n in range(SLEEP_TIMES_NUMOF): - child.expect(u"Slept for (\\d+) us \\(expected: (\\d+) us\\) Offset: (\\d+) us") + child.expect(u"Slept for (\\d+) us \\(expected: (\\d+) us\\) Offset: (-?\\d+) us") sleep_time = int(child.match.group(1)) exp = int(child.match.group(2)) - lower_bound = exp - (exp * INTERNAL_JITTER) upper_bound = exp + (exp * INTERNAL_JITTER) - if not (lower_bound < sleep_time < upper_bound): - delta = (upper_bound-lower_bound)/2 - raise InvalidTimeout("Invalid timeout %d ,expected %d < %d < %d" + if not (exp < sleep_time < upper_bound): + delta = (upper_bound-exp) + error = min(upper_bound-sleep_time, sleep_time-exp) + raise InvalidTimeout("Invalid timeout %d, expected %d < timeout < %d" "\nHost max error\t%d\nerror\t\t%d" % - (sleep_time, lower_bound, exp, upper_bound, - delta, sleep_time-lower_bound)) + (sleep_time, exp, upper_bound, + delta, error)) testtime = (time.time() - start_test) * US_PER_SEC child.expect(u"Test ran for (\\d+) us") exp = int(child.match.group(1))