1
1
//! Random number generation
2
2
3
- export Rng , seed, seeded_rng, Weighted , extensions;
4
- export xorshift, seeded_xorshift;
5
-
6
3
#[ allow( non_camel_case_types) ] // runtime type
7
4
enum rctx { }
8
5
@@ -17,13 +14,13 @@ extern mod rustrt {
17
14
}
18
15
19
16
/// A random number generator
20
- trait Rng {
17
+ pub trait Rng {
21
18
/// Return the next random integer
22
19
fn next ( ) -> u32 ;
23
20
}
24
21
25
22
/// A value with a particular weight compared to other values
26
- type Weighted < T > = { weight : uint , item: T } ;
23
+ pub type Weighted < T > = { weight : uint , item: T } ;
27
24
28
25
/// Extension methods for random number generators
29
26
impl Rng {
@@ -260,12 +257,12 @@ impl @RandRes: Rng {
260
257
}
261
258
262
259
/// Create a new random seed for seeded_rng
263
- fn seed ( ) -> ~[ u8 ] {
260
+ pub fn seed ( ) -> ~[ u8 ] {
264
261
rustrt:: rand_seed ( )
265
262
}
266
263
267
264
/// Create a random number generator with a system specified seed
268
- fn Rng ( ) -> Rng {
265
+ pub fn Rng ( ) -> Rng {
269
266
@RandRes ( rustrt:: rand_new ( ) ) as Rng
270
267
}
271
268
@@ -275,7 +272,7 @@ fn Rng() -> Rng {
275
272
* all other generators constructed with the same seed. The seed may be any
276
273
* length.
277
274
*/
278
- fn seeded_rng ( seed : ~[ u8 ] ) -> Rng {
275
+ pub fn seeded_rng ( seed : ~[ u8 ] ) -> Rng {
279
276
@RandRes ( rustrt:: rand_new_seeded ( seed) ) as Rng
280
277
}
281
278
@@ -299,29 +296,27 @@ impl XorShiftState: Rng {
299
296
}
300
297
}
301
298
302
- fn xorshift ( ) -> Rng {
299
+ pub fn xorshift ( ) -> Rng {
303
300
// constants taken from http://en.wikipedia.org/wiki/Xorshift
304
301
seeded_xorshift ( 123456789u32 , 362436069u32 , 521288629u32 , 88675123u32 )
305
302
}
306
303
307
- fn seeded_xorshift ( x : u32 , y : u32 , z : u32 , w : u32 ) -> Rng {
304
+ pub fn seeded_xorshift ( x : u32 , y : u32 , z : u32 , w : u32 ) -> Rng {
308
305
{ mut x: x, mut y: y, mut z: z, mut w: w} as Rng
309
306
}
310
307
311
308
#[ cfg( test) ]
312
- mod tests {
313
- #[ legacy_exports] ;
314
-
309
+ pub mod tests {
315
310
#[ test]
316
- fn rng_seeded ( ) {
311
+ pub fn rng_seeded ( ) {
317
312
let seed = rand:: seed ( ) ;
318
313
let ra = rand:: seeded_rng ( seed) ;
319
314
let rb = rand:: seeded_rng ( seed) ;
320
315
assert ra. gen_str ( 100 u) == rb. gen_str ( 100 u) ;
321
316
}
322
317
323
318
#[ test]
324
- fn rng_seeded_custom_seed ( ) {
319
+ pub fn rng_seeded_custom_seed ( ) {
325
320
// much shorter than generated seeds which are 1024 bytes
326
321
let seed = ~[ 2u8 , 32u8 , 4u8 , 32u8 , 51u8 ] ;
327
322
let ra = rand:: seeded_rng ( seed) ;
@@ -330,7 +325,7 @@ mod tests {
330
325
}
331
326
332
327
#[ test]
333
- fn rng_seeded_custom_seed2 ( ) {
328
+ pub fn rng_seeded_custom_seed2 ( ) {
334
329
let seed = ~[ 2u8 , 32u8 , 4u8 , 32u8 , 51u8 ] ;
335
330
let ra = rand:: seeded_rng ( seed) ;
336
331
// Regression test that isaac is actually using the above vector
@@ -341,7 +336,7 @@ mod tests {
341
336
}
342
337
343
338
#[ test]
344
- fn gen_int_range ( ) {
339
+ pub fn gen_int_range ( ) {
345
340
let r = rand:: Rng ( ) ;
346
341
let a = r. gen_int_range ( -3 , 42 ) ;
347
342
assert a >= -3 && a < 42 ;
@@ -352,12 +347,12 @@ mod tests {
352
347
#[ test]
353
348
#[ should_fail]
354
349
#[ ignore( cfg( windows) ) ]
355
- fn gen_int_from_fail ( ) {
350
+ pub fn gen_int_from_fail ( ) {
356
351
rand:: Rng ( ) . gen_int_range ( 5 , -2 ) ;
357
352
}
358
353
359
354
#[ test]
360
- fn gen_uint_range ( ) {
355
+ pub fn gen_uint_range ( ) {
361
356
let r = rand:: Rng ( ) ;
362
357
let a = r. gen_uint_range ( 3 u, 42 u) ;
363
358
assert a >= 3 u && a < 42 u;
@@ -368,27 +363,27 @@ mod tests {
368
363
#[ test]
369
364
#[ should_fail]
370
365
#[ ignore( cfg( windows) ) ]
371
- fn gen_uint_range_fail ( ) {
366
+ pub fn gen_uint_range_fail ( ) {
372
367
rand:: Rng ( ) . gen_uint_range ( 5 u, 2 u) ;
373
368
}
374
369
375
370
#[ test]
376
- fn gen_float ( ) {
371
+ pub fn gen_float ( ) {
377
372
let r = rand:: Rng ( ) ;
378
373
let a = r. gen_float ( ) ;
379
374
let b = r. gen_float ( ) ;
380
375
log ( debug, ( a, b) ) ;
381
376
}
382
377
383
378
#[ test]
384
- fn gen_weighted_bool ( ) {
379
+ pub fn gen_weighted_bool ( ) {
385
380
let r = rand:: Rng ( ) ;
386
381
assert r. gen_weighted_bool ( 0 u) == true ;
387
382
assert r. gen_weighted_bool ( 1 u) == true ;
388
383
}
389
384
390
385
#[ test]
391
- fn gen_str ( ) {
386
+ pub fn gen_str ( ) {
392
387
let r = rand:: Rng ( ) ;
393
388
log ( debug, r. gen_str ( 10 u) ) ;
394
389
log ( debug, r. gen_str ( 10 u) ) ;
@@ -399,29 +394,29 @@ mod tests {
399
394
}
400
395
401
396
#[ test]
402
- fn gen_bytes ( ) {
397
+ pub fn gen_bytes ( ) {
403
398
let r = rand:: Rng ( ) ;
404
399
assert r. gen_bytes ( 0 u) . len ( ) == 0 u;
405
400
assert r. gen_bytes ( 10 u) . len ( ) == 10 u;
406
401
assert r. gen_bytes ( 16 u) . len ( ) == 16 u;
407
402
}
408
403
409
404
#[ test]
410
- fn choose ( ) {
405
+ pub fn choose ( ) {
411
406
let r = rand:: Rng ( ) ;
412
407
assert r. choose ( [ 1 , 1 , 1 ] ) == 1 ;
413
408
}
414
409
415
410
#[ test]
416
- fn choose_option ( ) {
411
+ pub fn choose_option ( ) {
417
412
let r = rand:: Rng ( ) ;
418
413
let x: Option < int > = r. choose_option ( [ ] ) ;
419
414
assert x. is_none ( ) ;
420
415
assert r. choose_option ( [ 1 , 1 , 1 ] ) == Some ( 1 ) ;
421
416
}
422
417
423
418
#[ test]
424
- fn choose_weighted ( ) {
419
+ pub fn choose_weighted ( ) {
425
420
let r = rand:: Rng ( ) ;
426
421
assert r. choose_weighted ( ~[ { weight: 1 u, item: 42 } ] ) == 42 ;
427
422
assert r. choose_weighted ( ~[
@@ -431,7 +426,7 @@ mod tests {
431
426
}
432
427
433
428
#[ test]
434
- fn choose_weighted_option ( ) {
429
+ pub fn choose_weighted_option ( ) {
435
430
let r = rand:: Rng ( ) ;
436
431
assert r. choose_weighted_option ( ~[ { weight: 1 u, item: 42 } ] ) ==
437
432
Some ( 42 ) ;
@@ -444,7 +439,7 @@ mod tests {
444
439
}
445
440
446
441
#[ test]
447
- fn weighted_vec ( ) {
442
+ pub fn weighted_vec ( ) {
448
443
let r = rand:: Rng ( ) ;
449
444
let empty: ~[ int ] = ~[ ] ;
450
445
assert r. weighted_vec ( ~[ ] ) == empty;
@@ -456,7 +451,7 @@ mod tests {
456
451
}
457
452
458
453
#[ test]
459
- fn shuffle ( ) {
454
+ pub fn shuffle ( ) {
460
455
let r = rand:: Rng ( ) ;
461
456
let empty: ~[ int ] = ~[ ] ;
462
457
assert r. shuffle ( ~[ ] ) == empty;
0 commit comments