Files

78 lines
2.3 KiB
Python
Raw Permalink Normal View History

2023-06-07 17:58:22 -05:00
class BoundedInt():
2023-06-07 19:56:03 -05:00
def __init__(self, i, min_val, max_val):
2023-06-07 17:58:22 -05:00
self.i = i
2023-06-07 19:56:03 -05:00
self.min = min_val
self.max = max_val
2023-06-07 17:58:22 -05:00
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:
2023-06-07 19:56:03 -05:00
result = self.i + other
2023-06-07 17:58:22 -05:00
if result > self.max:
2023-06-07 19:56:03 -05:00
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()