#!/usr/bin/env python3 class Serial: def __init__(self, val): self._val = int(val) % 2**32 def __int__(self): return self._val def __str__(self): return str(int(self)) def __add__(self, val): return Serial(self._val + int(val)) def __eq__(self, other): return int(self) == int(other) def __ne__(self, other): return int(self) != int(other) def __lt__(self, other): return self != other and ( (int(self) < int(other) and int(other) - int(self) < 2**31) or (int(self) > int(other) and int(self) - int(other) > 2**31)) def __gt__(self, other): return self != other and ( (int(self) < int(other) and int(other) - int(self) > 2**31) or (int(self) > int(other) and int(self) - int(other) < 2**31)) if __name__ == "__main__": from random import randint for test in range(100): i1 = Serial(randint(0, 2**32-1)) i2 = Serial(randint(0, 2**32-1)) assert i1 == i2 or \ (i1 < i2 and not (i1 > i2)) or \ (i1 > i2 and not (i1 < i2)) or \ int(i1) & int(i2) == 0x80000000 if i1 == i2: print(f"{int(i1):10d} == {int(i2):10d}, how did that happen?") elif i1 < i2: print(f"{int(i1):10d} => {int(i2):10d}, can do it in one jump") else: i3 = i1 + (2**31 - 2) print(f"{int(i1):10d} => {int(i2):10d}, need to wrap, i3 value {i3}") assert i1 < i3 and i3 < i2