@@ -42,7 +42,13 @@ pub fn (mut rng PRNG) read(mut buf []u8) {
42
42
read_internal (mut rng, mut buf)
43
43
}
44
44
45
- // u32n returns a uniformly distributed pseudorandom 32-bit signed positive `u32` in range `[0, max)`.
45
+ // i32n returns a uniformly distributed pseudorandom 32-bit signed positive `i32` in range `[0, max)`.
46
+ @[inline]
47
+ pub fn (mut rng PRNG) i32n (max i32 ) ! i32 {
48
+ return i32 (rng.intn (max)! )
49
+ }
50
+
51
+ // u32n returns a uniformly distributed pseudorandom 32-bit unsigned positive `u32` in range `[0, max)`.
46
52
@[inline]
47
53
pub fn (mut rng PRNG) u32n (max u32 ) ! u32 {
48
54
if max == 0 {
@@ -138,6 +144,12 @@ pub fn (mut rng PRNG) i16() i16 {
138
144
return i16 (rng.u16 ())
139
145
}
140
146
147
+ // i32 returns a (possibly negative) pseudorandom 32-bit `i32`.
148
+ @[inline]
149
+ pub fn (mut rng PRNG) i32 () i32 {
150
+ return i32 (rng.u32 ())
151
+ }
152
+
141
153
// int returns a (possibly negative) pseudorandom 32-bit `int`.
142
154
@[inline]
143
155
pub fn (mut rng PRNG) int () int {
@@ -190,6 +202,16 @@ pub fn (mut rng PRNG) int_in_range(min int, max int) !int {
190
202
return min + rng.intn (max - min)!
191
203
}
192
204
205
+ // int_in_range returns a pseudorandom `int` in range `[min, max)`.
206
+ @[inline]
207
+ pub fn (mut rng PRNG) i32_in_range (min i32 , max i32 ) ! i32 {
208
+ if max < = min {
209
+ return error ('max must be greater than min' )
210
+ }
211
+ // This supports negative ranges like [-10, -5) because the difference is positive
212
+ return min + i32 (rng.intn (max - min)! )
213
+ }
214
+
193
215
// i64_in_range returns a pseudorandom `i64` in range `[min, max)`.
194
216
@[inline]
195
217
pub fn (mut rng PRNG) i64_in_range (min i64 , max i64 ) ! i64 {
@@ -564,11 +586,21 @@ pub fn i16() i16 {
564
586
return default_rng.i16 ()
565
587
}
566
588
589
+ // i32 returns a uniformly distributed pseudorandom 32-bit signed (possibly negative) `i32`.
590
+ pub fn i32 () i32 {
591
+ return default_rng.i32 ()
592
+ }
593
+
567
594
// int returns a uniformly distributed pseudorandom 32-bit signed (possibly negative) `int`.
568
595
pub fn int () int {
569
596
return default_rng.int ()
570
597
}
571
598
599
+ // i32n returns a uniformly distributed pseudorandom 32-bit signed positive `i32` in range `[0, max)`.
600
+ pub fn i32n (max i32 ) ! i32 {
601
+ return default_rng.i32n (max)
602
+ }
603
+
572
604
// intn returns a uniformly distributed pseudorandom 32-bit signed positive `int` in range `[0, max)`.
573
605
pub fn intn (max int ) ! int {
574
606
return default_rng.intn (max)
@@ -580,6 +612,12 @@ pub fn int_in_range(min int, max int) !int {
580
612
return default_rng.int_in_range (min, max)
581
613
}
582
614
615
+ // int_in_range returns a uniformly distributed pseudorandom 32-bit signed int in range `[min, max)`.
616
+ // Both `min` and `max` can be negative, but we must have `min < max`.
617
+ pub fn i32_in_range (min i32 , max i32 ) ! i32 {
618
+ return default_rng.i32_in_range (min, max)
619
+ }
620
+
583
621
// int31 returns a uniformly distributed pseudorandom 31-bit signed positive `int`.
584
622
pub fn int31 () int {
585
623
return default_rng.int31 ()
0 commit comments