@@ -345,71 +345,99 @@ impl fmt::Debug for Isaac64Rng {
345
345
#[ cfg( test) ]
346
346
mod test {
347
347
use { Rng , SeedableRng , iter} ;
348
- use distributions:: ascii_word_char;
349
348
use super :: Isaac64Rng ;
350
349
351
350
#[ test]
352
- fn test_rng_64_rand_seeded ( ) {
353
- let s = iter ( & mut :: test:: rng ( ) ) . map ( |rng| rng. next_u64 ( ) ) . take ( 256 ) . collect :: < Vec < u64 > > ( ) ;
354
- let mut ra: Isaac64Rng = SeedableRng :: from_seed ( & s[ ..] ) ;
355
- let mut rb: Isaac64Rng = SeedableRng :: from_seed ( & s[ ..] ) ;
356
- assert ! ( :: test:: iter_eq( iter( & mut ra) . map( |rng| ascii_word_char( rng) ) . take( 100 ) ,
357
- iter( & mut rb) . map( |rng| ascii_word_char( rng) ) . take( 100 ) ) ) ;
351
+ fn test_isaac64_from_seed ( ) {
352
+ let seed = iter ( & mut :: test:: rng ( ) )
353
+ . map ( |rng| rng. next_u64 ( ) )
354
+ . take ( 256 )
355
+ . collect :: < Vec < u64 > > ( ) ;
356
+ let mut rng1 = Isaac64Rng :: from_seed ( & seed[ ..] ) ;
357
+ let mut rng2 = Isaac64Rng :: from_seed ( & seed[ ..] ) ;
358
+ for _ in 0 ..100 {
359
+ assert_eq ! ( rng1. next_u64( ) , rng2. next_u64( ) ) ;
360
+ }
358
361
}
359
362
360
363
#[ test]
361
- fn test_rng_64_seeded ( ) {
364
+ fn test_isaac64_from_seed_fixed ( ) {
362
365
let seed: & [ _ ] = & [ 1 , 23 , 456 , 7890 , 12345 ] ;
363
- let mut ra: Isaac64Rng = SeedableRng :: from_seed ( seed) ;
364
- let mut rb: Isaac64Rng = SeedableRng :: from_seed ( seed) ;
365
- assert ! ( :: test:: iter_eq( iter( & mut ra) . map( |rng| ascii_word_char( rng) ) . take( 100 ) ,
366
- iter( & mut rb) . map( |rng| ascii_word_char( rng) ) . take( 100 ) ) ) ;
366
+ let mut rng1 = Isaac64Rng :: from_seed ( & seed[ ..] ) ;
367
+ let mut rng2 = Isaac64Rng :: from_seed ( & seed[ ..] ) ;
368
+ for _ in 0 ..100 {
369
+ assert_eq ! ( rng1. next_u64( ) , rng2. next_u64( ) ) ;
370
+ }
367
371
}
368
372
369
373
#[ test]
370
- fn test_rng_64_reseed ( ) {
371
- let s = iter ( & mut :: test:: rng ( ) ) . map ( |rng| rng. next_u64 ( ) ) . take ( 256 ) . collect :: < Vec < u64 > > ( ) ;
372
- let mut r: Isaac64Rng = SeedableRng :: from_seed ( & s[ ..] ) ;
373
- let string1: String = iter ( & mut r) . map ( |rng| ascii_word_char ( rng) ) . take ( 100 ) . collect ( ) ;
374
-
375
- r. reseed ( & s[ ..] ) ;
376
-
377
- let string2: String = iter ( & mut r) . map ( |rng| ascii_word_char ( rng) ) . take ( 100 ) . collect ( ) ;
378
- assert_eq ! ( string1, string2) ;
374
+ fn test_isaac64_reseed ( ) {
375
+ let seed = iter ( & mut :: test:: rng ( ) )
376
+ . map ( |rng| rng. next_u64 ( ) )
377
+ . take ( 256 )
378
+ . collect :: < Vec < u64 > > ( ) ;
379
+ let mut rng = Isaac64Rng :: from_seed ( & seed[ ..] ) ;
380
+ let vec1 = ( 0 ..100 ) . map ( |_| rng. next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
381
+
382
+ rng. reseed ( & seed[ ..] ) ;
383
+
384
+ let vec2 = ( 0 ..100 ) . map ( |_| rng. next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
385
+ assert_eq ! ( vec1, vec2) ;
379
386
}
380
387
381
388
#[ test]
382
- fn test_rng_64_true_values ( ) {
389
+ fn test_isaac64_true_values ( ) {
383
390
let seed: & [ _ ] = & [ 1 , 23 , 456 , 7890 , 12345 ] ;
384
- let mut ra : Isaac64Rng = SeedableRng :: from_seed ( seed) ;
391
+ let mut rng1 = Isaac64Rng :: from_seed ( seed) ;
385
392
// Regression test that isaac is actually using the above vector
386
- let v = ( 0 ..10 ) . map ( |_| ra . next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
393
+ let v = ( 0 ..10 ) . map ( |_| rng1 . next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
387
394
assert_eq ! ( v,
388
- vec!( 547121783600835980 , 14377643087320773276 , 17351601304698403469 ,
389
- 1238879483818134882 , 11952566807690396487 , 13970131091560099343 ,
390
- 4469761996653280935 , 15552757044682284409 , 6860251611068737823 ,
391
- 13722198873481261842 ) ) ;
395
+ vec!( 547121783600835980 , 14377643087320773276 ,
396
+ 17351601304698403469 , 1238879483818134882 ,
397
+ 11952566807690396487 , 13970131091560099343 ,
398
+ 4469761996653280935 , 15552757044682284409 ,
399
+ 6860251611068737823 , 13722198873481261842 ) ) ;
392
400
393
401
let seed: & [ _ ] = & [ 12345 , 67890 , 54321 , 9876 ] ;
394
- let mut rb : Isaac64Rng = SeedableRng :: from_seed ( seed) ;
402
+ let mut rng2 = Isaac64Rng :: from_seed ( seed) ;
395
403
// skip forward to the 10000th number
396
- for _ in 0 ..10000 { rb . next_u64 ( ) ; }
404
+ for _ in 0 ..10000 { rng2 . next_u64 ( ) ; }
397
405
398
- let v = ( 0 ..10 ) . map ( |_| rb . next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
406
+ let v = ( 0 ..10 ) . map ( |_| rng2 . next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
399
407
assert_eq ! ( v,
400
- vec!( 18143823860592706164 , 8491801882678285927 , 2699425367717515619 ,
401
- 17196852593171130876 , 2606123525235546165 , 15790932315217671084 ,
402
- 596345674630742204 , 9947027391921273664 , 11788097613744130851 ,
403
- 10391409374914919106 ) ) ;
408
+ vec!( 18143823860592706164 , 8491801882678285927 ,
409
+ 2699425367717515619 , 17196852593171130876 ,
410
+ 2606123525235546165 , 15790932315217671084 ,
411
+ 596345674630742204 , 9947027391921273664 ,
412
+ 11788097613744130851 , 10391409374914919106 ) ) ;
413
+ }
414
+
415
+ #[ test]
416
+ fn test_isaac_new_uninitialized ( ) {
417
+ // Compare the results from initializing `IsaacRng` with
418
+ // `new_from_u64(0)`, to make sure it is the same as the reference
419
+ // implementation when used uninitialized.
420
+ // Note: We only test the first 16 integers, not the full 256 of the
421
+ // first block.
422
+ let mut rng = Isaac64Rng :: new_from_u64 ( 0 ) ;
423
+ let vec = ( 0 ..16 ) . map ( |_| rng. next_u64 ( ) ) . collect :: < Vec < _ > > ( ) ;
424
+ let expected: [ u64 ; 16 ] = [
425
+ 0x4DEA9153AEBB43A4 , 0x04CB0071A1E74A08 , 0xE2B0602EF74897B2 ,
426
+ 0x2F13C484446CC310 , 0xB9AEB510A0D0D3A9 , 0xA4D98E3601C9195C ,
427
+ 0xB605E59670053265 , 0xCD99EA9092B2596B , 0xB16531BD0B42016A ,
428
+ 0x43EBB06085E9AB15 , 0xA8ABEE66D363E63B , 0xEAD6F4E8559693C1 ,
429
+ 0xD00A468BE2791B2B , 0xF0526C1E115C3978 , 0x841E403158CA3FF9 ,
430
+ 0x6453665DCC16DA88 ] ;
431
+ assert_eq ! ( vec, expected) ;
404
432
}
405
433
406
434
#[ test]
407
- fn test_rng_clone ( ) {
435
+ fn test_isaac64_clone ( ) {
408
436
let seed: & [ _ ] = & [ 1 , 23 , 456 , 7890 , 12345 ] ;
409
- let mut rng : Isaac64Rng = SeedableRng :: from_seed ( seed) ;
410
- let mut clone = rng . clone ( ) ;
437
+ let mut rng1 = Isaac64Rng :: from_seed ( seed) ;
438
+ let mut rng2 = rng1 . clone ( ) ;
411
439
for _ in 0 ..16 {
412
- assert_eq ! ( rng . next_u64( ) , clone . next_u64( ) ) ;
440
+ assert_eq ! ( rng1 . next_u64( ) , rng2 . next_u64( ) ) ;
413
441
}
414
442
}
415
443
}
0 commit comments