class BoundedInt(): def __init__(self, i, min_val, max_val): self.i = i self.min = min_val self.max = max_val def __int__(self): return self.i def __sub__(self, other): if isinstance(other, BoundedInt): result = self.i - other.i else: result = self.i - other if result < self.min: raise ValueError("Result exceeds min value") return BoundedInt(result, self.min, self.max) def __add__(self, other): if isinstance(other, BoundedInt): result = self.i + other.i else: result = self.i + other if result > self.max: raise ValueError("Result exceeds max value") return BoundedInt(result, self.min, self.max) def test1(self): bi1 = BoundedInt(0xdeadbeef, min_val=(0xdeadbeef - 1), max_val=(0xdeadbeef + 1)) if int(bi1) == 0xdeadbeef: print(f"✅ Test 1 passed!") else: print(f"❌ Test 1 failed, int(bi1) = {int(bi1)}, expected 0xdeadbeef") def test2(self): bi2 = BoundedInt(1, min_val=0, max_val=1) bi3 = BoundedInt(1, min_val=0, max_val=1) try: bi4 = bi2 + bi3 # 1 + 1 = 2, which exceeds max_val = 1 print(f"❌ Test 2 failed!") except ValueError as err: print(f"✅ Test 2 passed!") def test3(self): bi4 = BoundedInt(1, min_val=0, max_val=1) bi5 = BoundedInt(2, min_val=0, max_val=-1) try: bi6 = bi4 - bi5 # 1 - 2 = -1, which is less than min_val = 0 print(f"❌ Test 3 failed!") except ValueError as err: print(f"✅ Test 3 passed!") def test4(self): bi7 = BoundedInt(1, min_val=0, max_val=1) bi8 = 2 try: bi9 = bi7 + bi8 print(f"❌ Test 4 failed!") except ValueError as err: print(f"✅ Test 4 passed!") def test5(self): bi10 = BoundedInt(1, min_val=0, max_val=1) bi11 = 2 try: bi12 = bi10 - 11 print(f"❌ Test 5 failed!") except ValueError as err: print(f"✅ Test 5 passed!") tester = BoundedInt(0, 0, 0) tester.test1() tester.test2() tester.test3() tester.test4() tester.test5()