random: fix getrandbits(0)

this is defined by python (returns 0) and tested in a test
This commit is contained in:
Jeff Epler 2024-02-11 07:42:12 -08:00
parent 9f697edd51
commit 0d1e4dbbb0
2 changed files with 5 additions and 2 deletions

View file

@ -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));

View file

@ -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);