Skip to content

Commit 82695f8

Browse files
committed
Clean up return types
Changed return type from None to Exceptions and fix doctests
1 parent 27aebea commit 82695f8

File tree

1 file changed

+39
-25
lines changed

1 file changed

+39
-25
lines changed

bit_manipulation/multibit_manipulation.py

+39-25
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
Anything like int(None) is going to cause a loud error. """
7070

7171

72-
def bit_get(bint: int, index: int) -> int | None:
72+
def bit_get(bint: int, index: int) -> int:
7373
"""Get value of bit at index in bint.
7474
7575
>>> bit_get(15, 0)
@@ -78,16 +78,20 @@ def bit_get(bint: int, index: int) -> int | None:
7878
0
7979
>>> bit_get(0, 4)
8080
0
81-
>>> bit_get(-1, 2) is None
82-
True
83-
>>> bit_get(0, -1) is None
84-
True
81+
>>> bit_get(-1, 2)
82+
Traceback (most recent call last):
83+
...
84+
ValueError: All input values must be positive integers.
85+
>>> bit_get(0, -1)
86+
Traceback (most recent call last):
87+
...
88+
ValueError: All input values must be positive integers.
8589
"""
8690

8791
return multibit_get(bint, index, 1)
8892

8993

90-
def bit_set(bint: int, index: int, value: int = 1) -> int | None:
94+
def bit_set(bint: int, index: int, value: int = 1) -> int:
9195
"""Set bit at index to value 1 or 0, like set() or unset().
9296
9397
>>> bit_set(15, 0, 0)
@@ -96,17 +100,19 @@ def bit_set(bint: int, index: int, value: int = 1) -> int | None:
96100
31
97101
>>> bit_set(31, 6, 0)
98102
31
99-
>>> bit_set(31, 6, 3) is None
100-
True
103+
>>> bit_set(31, 6, 3)
104+
Traceback (most recent call last):
105+
...
106+
ValueError: Input value must be 1 or 0.
101107
"""
102108

103109
if value not in [0, 1]:
104-
return None # error
110+
raise ValueError("Input value must be 1 or 0.")
105111

106112
return multibit_set(bint, index, 1, value)
107113

108114

109-
def bit_insert(bint: int, index: int, value: int = 1) -> int | None:
115+
def bit_insert(bint: int, index: int, value: int = 1) -> int:
110116
"""Insert bit value before index.
111117
112118
>>> bit_insert(15, 0, 0)
@@ -120,12 +126,12 @@ def bit_insert(bint: int, index: int, value: int = 1) -> int | None:
120126
"""
121127

122128
if value not in [0, 1]:
123-
return None # error
129+
raise ValueError("Input value must be 1 or 0.")
124130

125131
return multibit_insert(bint, index, 1, value)
126132

127133

128-
def bit_remove(bint: int, index: int) -> int | None:
134+
def bit_remove(bint: int, index: int) -> int:
129135
"""Remove the bit at index from bint.
130136
131137
>>> bit_remove(15, 0)
@@ -141,7 +147,7 @@ def bit_remove(bint: int, index: int) -> int | None:
141147
return multibit_remove(bint, index, 1)
142148

143149

144-
def multibit_get(bint: int, index: int, bit_len: int) -> int | None:
150+
def multibit_get(bint: int, index: int, bit_len: int) -> int:
145151
"""Get bit_len number of bits starting from index.
146152
819 = 1100110011.
147153
@@ -156,12 +162,12 @@ def multibit_get(bint: int, index: int, bit_len: int) -> int | None:
156162
"""
157163

158164
if bint < 0 or index < 0 or bit_len < 0:
159-
return None # error
165+
raise ValueError("All input values must be positive integers.")
160166

161167
return (bint >> index) & ((1 << bit_len) - 1)
162168

163169

164-
def multibit_set(bint: int, index: int, bit_len: int, value: int) -> int | None:
170+
def multibit_set(bint: int, index: int, bit_len: int, value: int) -> int:
165171
"""Overlay bint at index with value for bit_len bits.
166172
167173
>>> multibit_set(0, 1, 1, 0)
@@ -173,20 +179,24 @@ def multibit_set(bint: int, index: int, bit_len: int, value: int) -> int | None:
173179
>>> multibit_set(22, 2, 1, 0)
174180
18
175181
>>> multibit_set(22, 2, 1, 3) is None
176-
True
182+
Traceback (most recent call last):
183+
...
184+
ValueError: Bit length of value can not be greater than specified bit length.
177185
"""
178186

179187
if bint < 0 or index < 0 or bit_len < 0 or value < 0:
180-
return None # error
188+
raise ValueError("All input values must be positive integers.")
181189
if bit_length(value) > bit_len:
182-
return None
190+
raise ValueError(
191+
"Bit length of value can not be greater than specified bit length."
192+
)
183193

184194
return ((((bint >> (index + bit_len)) << bit_len) | value) << index) | (
185195
bint & (1 << index) - 1
186196
)
187197

188198

189-
def multibit_insert(bint: int, index: int, bit_len: int, value: int) -> int | None:
199+
def multibit_insert(bint: int, index: int, bit_len: int, value: int) -> int:
190200
"""Insert before index-th slot
191201
192202
>>> multibit_insert(0, 1, 1, 1)
@@ -197,19 +207,23 @@ def multibit_insert(bint: int, index: int, bit_len: int, value: int) -> int | No
197207
45
198208
>>> multibit_insert(22, 2, 1, 0)
199209
42
200-
>>> multibit_insert(22, 2, 1, 3) is None
201-
True
210+
>>> multibit_insert(22, 2, 1, 3)
211+
Traceback (most recent call last):
212+
...
213+
ValueError: Bit length of value can not be greater than specified bit length.
202214
"""
203215

204216
if bint < 0 or index < 0 or bit_len < 0 or value < 0:
205-
return None # error
217+
raise ValueError("All input values must be positive integers.")
206218
if bit_length(value) > bit_len:
207-
return None
219+
raise ValueError(
220+
"Bit length of value can not be greater than specified bit length."
221+
)
208222

209223
return ((((bint >> index) << bit_len) | value) << index) | bint & ((1 << index) - 1)
210224

211225

212-
def multibit_remove(bint: int, index: int, bit_len: int) -> int | None:
226+
def multibit_remove(bint: int, index: int, bit_len: int) -> int:
213227
"""Remove bits in bint from index to index+bit_len.
214228
215229
>>> multibit_remove(3, 1, 1)
@@ -225,7 +239,7 @@ def multibit_remove(bint: int, index: int, bit_len: int) -> int | None:
225239
"""
226240

227241
if bint < 0 or index < 0 or bit_len < 0:
228-
return None # error
242+
raise ValueError("All input values must be positive integers.")
229243

230244
return ((bint >> index + bit_len) << index) | bint & ((1 << index) - 1)
231245

0 commit comments

Comments
 (0)