Skip to content

Commit 0d1e4db

Browse files
committed
random: fix getrandbits(0)
this is defined by python (returns 0) and tested in a test
1 parent 9f697ed commit 0d1e4db

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

shared-bindings/random/__init__.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(random_seed_obj, random_seed);
6565
//| ...
6666
//|
6767
STATIC mp_obj_t random_getrandbits(mp_obj_t num_in) {
68-
int n = mp_obj_get_int(num_in);
69-
if (n > 32 || n == 0) {
68+
mp_int_t n = mp_obj_get_int(num_in);
69+
if (n > 32 || n < 0) {
7070
mp_raise_ValueError(NULL);
7171
}
7272
return mp_obj_new_int_from_uint(shared_modules_random_getrandbits((uint8_t)n));

shared-module/random/__init__.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ void shared_modules_random_seed(mp_uint_t seed) {
8080
}
8181

8282
mp_uint_t shared_modules_random_getrandbits(uint8_t n) {
83+
if (n == 0) {
84+
return 0;
85+
}
8386
uint32_t mask = ~0;
8487
// Beware of C undefined behavior when shifting by >= than bit size
8588
mask >>= (32 - n);

0 commit comments

Comments
 (0)