@@ -26,6 +26,7 @@ use impls;
26
26
/// RNGs"](https://www.jstatsoft.org/v08/i14/paper). *Journal of
27
27
/// Statistical Software*. Vol. 8 (Issue 14).
28
28
#[ derive( Clone ) ]
29
+ #[ cfg_attr( feature="serde-1" , derive( Serialize , Deserialize ) ) ]
29
30
pub struct XorShiftRng {
30
31
x : w < u32 > ,
31
32
y : w < u32 > ,
@@ -115,3 +116,37 @@ impl Rand for XorShiftRng {
115
116
XorShiftRng { x : w ( x) , y : w ( y) , z : w ( z) , w : w ( w_) }
116
117
}
117
118
}
119
+
120
+ #[ cfg( test) ]
121
+ mod tests {
122
+ use { Rng , SeedableRng } ;
123
+
124
+ #[ cfg( feature="serde-1" ) ]
125
+ #[ test]
126
+ fn test_serde ( ) {
127
+ use super :: XorShiftRng ;
128
+ use thread_rng;
129
+ use bincode;
130
+ use std:: io:: { BufWriter , BufReader } ;
131
+
132
+ let seed: [ u32 ; 4 ] = thread_rng ( ) . gen ( ) ;
133
+ let mut rng: XorShiftRng = SeedableRng :: from_seed ( seed) ;
134
+
135
+ let buf: Vec < u8 > = Vec :: new ( ) ;
136
+ let mut buf = BufWriter :: new ( buf) ;
137
+ bincode:: serialize_into ( & mut buf, & rng, bincode:: Infinite ) . expect ( "Could not serialize" ) ;
138
+
139
+ let buf = buf. into_inner ( ) . unwrap ( ) ;
140
+ let mut read = BufReader :: new ( & buf[ ..] ) ;
141
+ let mut deserialized: XorShiftRng = bincode:: deserialize_from ( & mut read, bincode:: Infinite ) . expect ( "Could not deserialize" ) ;
142
+
143
+ assert_eq ! ( rng. x, deserialized. x) ;
144
+ assert_eq ! ( rng. y, deserialized. y) ;
145
+ assert_eq ! ( rng. z, deserialized. z) ;
146
+ assert_eq ! ( rng. w, deserialized. w) ;
147
+
148
+ for _ in 0 ..16 {
149
+ assert_eq ! ( rng. next_u64( ) , deserialized. next_u64( ) ) ;
150
+ }
151
+ }
152
+ }
0 commit comments