1try: 2 from utime import ticks_diff, ticks_add 3except ImportError: 4 print("SKIP") 5 raise SystemExit 6 7MAX = ticks_add(0, -1) 8# Should be done like this to avoid small int overflow 9MODULO_HALF = MAX // 2 + 1 10 11# Invariants: 12# if ticks_diff(a, b) = c, 13# then ticks_diff(b, a) = -c 14 15assert ticks_diff(1, 0) == 1, ticks_diff(1, 0) 16assert ticks_diff(0, 1) == -1 17 18assert ticks_diff(0, MAX) == 1 19assert ticks_diff(MAX, 0) == -1 20 21assert ticks_diff(0, MAX - 1) == 2 22 23# Maximum "positive" distance 24assert ticks_diff(MODULO_HALF, 1) == MODULO_HALF - 1, ticks_diff(MODULO_HALF, 1) 25# Step further, and it becomes a negative distance 26assert ticks_diff(MODULO_HALF, 0) == -MODULO_HALF 27 28# Offsetting that in either direction doesn't affect the result 29off = 100 30# Cheating and skipping to use ticks_add() when we know there's no wraparound 31# Real apps should use always it. 32assert ticks_diff(MODULO_HALF + off, 1 + off) == MODULO_HALF - 1 33assert ticks_diff(MODULO_HALF + off, 0 + off) == -MODULO_HALF 34assert ticks_diff(MODULO_HALF - off, ticks_add(1, -off)) == MODULO_HALF - 1 35assert ticks_diff(MODULO_HALF - off, ticks_add(0, -off)) == -MODULO_HALF 36 37print("OK") 38