tests/xtimer_usleep: fail with negative offset

- xtimer_usleep(timeout) should sleep for at least timeout us.
  Negative offset, i.e. sleeping less than the specified time
  is incorrect.
This commit is contained in:
francisco 2019-05-07 08:48:30 +02:00
parent cd0ab4a193
commit a687a26f42
2 changed files with 24 additions and 7 deletions

View File

@ -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
```

View File

@ -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))