69
69
Anything like int(None) is going to cause a loud error. """
70
70
71
71
72
- def bit_get (bint : int , index : int ) -> int | None :
72
+ def bit_get (bint : int , index : int ) -> int :
73
73
"""Get value of bit at index in bint.
74
74
75
75
>>> bit_get(15, 0)
@@ -78,16 +78,20 @@ def bit_get(bint: int, index: int) -> int | None:
78
78
0
79
79
>>> bit_get(0, 4)
80
80
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.
85
89
"""
86
90
87
91
return multibit_get (bint , index , 1 )
88
92
89
93
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 :
91
95
"""Set bit at index to value 1 or 0, like set() or unset().
92
96
93
97
>>> bit_set(15, 0, 0)
@@ -96,17 +100,19 @@ def bit_set(bint: int, index: int, value: int = 1) -> int | None:
96
100
31
97
101
>>> bit_set(31, 6, 0)
98
102
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.
101
107
"""
102
108
103
109
if value not in [0 , 1 ]:
104
- return None # error
110
+ raise ValueError ( "Input value must be 1 or 0." )
105
111
106
112
return multibit_set (bint , index , 1 , value )
107
113
108
114
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 :
110
116
"""Insert bit value before index.
111
117
112
118
>>> bit_insert(15, 0, 0)
@@ -120,12 +126,12 @@ def bit_insert(bint: int, index: int, value: int = 1) -> int | None:
120
126
"""
121
127
122
128
if value not in [0 , 1 ]:
123
- return None # error
129
+ raise ValueError ( "Input value must be 1 or 0." )
124
130
125
131
return multibit_insert (bint , index , 1 , value )
126
132
127
133
128
- def bit_remove (bint : int , index : int ) -> int | None :
134
+ def bit_remove (bint : int , index : int ) -> int :
129
135
"""Remove the bit at index from bint.
130
136
131
137
>>> bit_remove(15, 0)
@@ -141,7 +147,7 @@ def bit_remove(bint: int, index: int) -> int | None:
141
147
return multibit_remove (bint , index , 1 )
142
148
143
149
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 :
145
151
"""Get bit_len number of bits starting from index.
146
152
819 = 1100110011.
147
153
@@ -156,12 +162,12 @@ def multibit_get(bint: int, index: int, bit_len: int) -> int | None:
156
162
"""
157
163
158
164
if bint < 0 or index < 0 or bit_len < 0 :
159
- return None # error
165
+ raise ValueError ( "All input values must be positive integers." )
160
166
161
167
return (bint >> index ) & ((1 << bit_len ) - 1 )
162
168
163
169
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 :
165
171
"""Overlay bint at index with value for bit_len bits.
166
172
167
173
>>> multibit_set(0, 1, 1, 0)
@@ -173,20 +179,24 @@ def multibit_set(bint: int, index: int, bit_len: int, value: int) -> int | None:
173
179
>>> multibit_set(22, 2, 1, 0)
174
180
18
175
181
>>> 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.
177
185
"""
178
186
179
187
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." )
181
189
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
+ )
183
193
184
194
return ((((bint >> (index + bit_len )) << bit_len ) | value ) << index ) | (
185
195
bint & (1 << index ) - 1
186
196
)
187
197
188
198
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 :
190
200
"""Insert before index-th slot
191
201
192
202
>>> multibit_insert(0, 1, 1, 1)
@@ -197,19 +207,23 @@ def multibit_insert(bint: int, index: int, bit_len: int, value: int) -> int | No
197
207
45
198
208
>>> multibit_insert(22, 2, 1, 0)
199
209
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.
202
214
"""
203
215
204
216
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." )
206
218
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
+ )
208
222
209
223
return ((((bint >> index ) << bit_len ) | value ) << index ) | bint & ((1 << index ) - 1 )
210
224
211
225
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 :
213
227
"""Remove bits in bint from index to index+bit_len.
214
228
215
229
>>> multibit_remove(3, 1, 1)
@@ -225,7 +239,7 @@ def multibit_remove(bint: int, index: int, bit_len: int) -> int | None:
225
239
"""
226
240
227
241
if bint < 0 or index < 0 or bit_len < 0 :
228
- return None # error
242
+ raise ValueError ( "All input values must be positive integers." )
229
243
230
244
return ((bint >> index + bit_len ) << index ) | bint & ((1 << index ) - 1 )
231
245
0 commit comments