mirror of
https://github.com/micropython/micropython.git
synced 2026-01-06 20:20:14 +01:00
extmod/utime_mphal: Make ticks_add check for overflow of delta.
Work done in collaboration with @jimmo. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
42
tests/extmod/ticks_add.py
Normal file
42
tests/extmod/ticks_add.py
Normal file
@@ -0,0 +1,42 @@
|
||||
try:
|
||||
from utime import ticks_diff, ticks_add
|
||||
except ImportError:
|
||||
print("SKIP")
|
||||
raise SystemExit
|
||||
|
||||
# Maximum value returned from ticks_add, ticks_ms, etc.
|
||||
TICKS_MAX = ticks_add(0, -1)
|
||||
# Maximum value returned from ticks_diff.
|
||||
TICKS_INTERVAL_MAX = TICKS_MAX // 2
|
||||
|
||||
# Invariants:
|
||||
# - ticks_diff(ticks_add(T, delta), T) == delta
|
||||
# - ticks_diff(T, ticks_add(T, delta)) == -delta
|
||||
|
||||
# Check actual values of ticks_add.
|
||||
print(ticks_add(20, 12))
|
||||
print(ticks_add(20, -12))
|
||||
|
||||
# Check invariant.
|
||||
print(ticks_diff(ticks_add(100, 123), 100))
|
||||
print(ticks_diff(ticks_add(100, -123), 100))
|
||||
print(ticks_diff(100, ticks_add(100, 123)))
|
||||
print(ticks_diff(100, ticks_add(100, -123)))
|
||||
|
||||
# Check limits.
|
||||
for T in (0, 10, TICKS_MAX):
|
||||
for delta in (
|
||||
-TICKS_INTERVAL_MAX - 1,
|
||||
-TICKS_INTERVAL_MAX,
|
||||
0,
|
||||
TICKS_INTERVAL_MAX,
|
||||
TICKS_INTERVAL_MAX + 1,
|
||||
):
|
||||
try:
|
||||
print(ticks_diff(ticks_add(T, delta), T) == delta)
|
||||
except OverflowError:
|
||||
print("OverflowError")
|
||||
try:
|
||||
print(ticks_diff(T, ticks_add(T, delta)) == -delta)
|
||||
except OverflowError:
|
||||
print("OverflowError")
|
||||
36
tests/extmod/ticks_add.py.exp
Normal file
36
tests/extmod/ticks_add.py.exp
Normal file
@@ -0,0 +1,36 @@
|
||||
32
|
||||
8
|
||||
123
|
||||
-123
|
||||
-123
|
||||
123
|
||||
OverflowError
|
||||
OverflowError
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
OverflowError
|
||||
OverflowError
|
||||
OverflowError
|
||||
OverflowError
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
OverflowError
|
||||
OverflowError
|
||||
OverflowError
|
||||
OverflowError
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
OverflowError
|
||||
OverflowError
|
||||
Reference in New Issue
Block a user