@@ -71,8 +71,11 @@ const RAND_SIZE: usize = 1 << RAND_SIZE_LEN;
71
71
///
72
72
/// [1]: Bob Jenkins, [*ISAAC and RC4*](
73
73
/// http://burtleburtle.net/bob/rand/isaac.html)
74
+ #[ cfg_attr( feature="serde-1" , derive( Serialize , Deserialize ) ) ]
74
75
pub struct Isaac64Rng {
76
+ #[ cfg_attr( feature="serde-1" , serde( with="super::isaac_serde::rand_size_serde" ) ) ]
75
77
rsl : [ u64 ; RAND_SIZE ] ,
78
+ #[ cfg_attr( feature="serde-1" , serde( with="super::isaac_serde::rand_size_serde" ) ) ]
76
79
mem : [ w64 ; RAND_SIZE ] ,
77
80
a : w64 ,
78
81
b : w64 ,
@@ -473,4 +476,39 @@ mod test {
473
476
assert_eq ! ( rng. next_u64( ) , clone. next_u64( ) ) ;
474
477
}
475
478
}
479
+
480
+ #[ test]
481
+ #[ cfg( feature="serde-1" ) ]
482
+ fn test_rng_serde ( ) {
483
+ use bincode;
484
+ use std:: io:: { BufWriter , BufReader } ;
485
+
486
+ let seed: & [ _ ] = & [ 1 , 23 , 456 , 7890 , 12345 ] ;
487
+ let mut rng: Isaac64Rng = SeedableRng :: from_seed ( seed) ;
488
+
489
+ let buf: Vec < u8 > = Vec :: new ( ) ;
490
+ let mut buf = BufWriter :: new ( buf) ;
491
+ bincode:: serialize_into ( & mut buf, & rng, bincode:: Infinite ) . expect ( "Could not serialize" ) ;
492
+
493
+ let buf = buf. into_inner ( ) . unwrap ( ) ;
494
+ let mut read = BufReader :: new ( & buf[ ..] ) ;
495
+ let mut deserialized: Isaac64Rng = bincode:: deserialize_from ( & mut read, bincode:: Infinite ) . expect ( "Could not deserialize" ) ;
496
+
497
+ assert_eq ! ( rng. index, deserialized. index) ;
498
+ assert_eq ! ( rng. half_used, deserialized. half_used) ;
499
+ /* Can't assert directly because of the array size */
500
+ for ( orig, deser) in rng. rsl . iter ( ) . zip ( deserialized. rsl . iter ( ) ) {
501
+ assert_eq ! ( orig, deser) ;
502
+ }
503
+ for ( orig, deser) in rng. mem . iter ( ) . zip ( deserialized. mem . iter ( ) ) {
504
+ assert_eq ! ( orig, deser) ;
505
+ }
506
+ assert_eq ! ( rng. a, deserialized. a) ;
507
+ assert_eq ! ( rng. b, deserialized. b) ;
508
+ assert_eq ! ( rng. c, deserialized. c) ;
509
+
510
+ for _ in 0 ..16 {
511
+ assert_eq ! ( rng. next_u64( ) , deserialized. next_u64( ) ) ;
512
+ }
513
+ }
476
514
}
0 commit comments