random: fix getrandbits(0)
this is defined by python (returns 0) and tested in a test
This commit is contained in:
parent
9f697edd51
commit
0d1e4dbbb0
2 changed files with 5 additions and 2 deletions
|
|
@ -65,8 +65,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(random_seed_obj, random_seed);
|
|||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t random_getrandbits(mp_obj_t num_in) {
|
||||
int n = mp_obj_get_int(num_in);
|
||||
if (n > 32 || n == 0) {
|
||||
mp_int_t n = mp_obj_get_int(num_in);
|
||||
if (n > 32 || n < 0) {
|
||||
mp_raise_ValueError(NULL);
|
||||
}
|
||||
return mp_obj_new_int_from_uint(shared_modules_random_getrandbits((uint8_t)n));
|
||||
|
|
|
|||
|
|
@ -80,6 +80,9 @@ void shared_modules_random_seed(mp_uint_t seed) {
|
|||
}
|
||||
|
||||
mp_uint_t shared_modules_random_getrandbits(uint8_t n) {
|
||||
if (n == 0) {
|
||||
return 0;
|
||||
}
|
||||
uint32_t mask = ~0;
|
||||
// Beware of C undefined behavior when shifting by >= than bit size
|
||||
mask >>= (32 - n);
|
||||
|
|
|
|||
Loading…
Reference in a new issue