@@ -98,73 +98,58 @@ float_impls! { f32_rand_impls, f32, 23, next_f32 }
98
98
99
99
#[ cfg( test) ]
100
100
mod tests {
101
- use { Rng , RngCore , impls} ;
101
+ use Rng ;
102
+ use mock:: StepRng ;
102
103
use distributions:: { Open01 , Closed01 } ;
103
104
104
105
const EPSILON32 : f32 = :: core:: f32:: EPSILON ;
105
106
const EPSILON64 : f64 = :: core:: f64:: EPSILON ;
106
107
107
- struct ConstantRng ( u64 ) ;
108
- impl RngCore for ConstantRng {
109
- fn next_u32 ( & mut self ) -> u32 {
110
- let ConstantRng ( v) = * self ;
111
- v as u32
112
- }
113
- fn next_u64 ( & mut self ) -> u64 {
114
- let ConstantRng ( v) = * self ;
115
- v
116
- }
117
-
118
- fn fill_bytes ( & mut self , dest : & mut [ u8 ] ) {
119
- impls:: fill_bytes_via_u64 ( self , dest)
120
- }
121
- }
122
-
123
108
#[ test]
124
109
fn floating_point_edge_cases ( ) {
125
- let mut zeros = ConstantRng ( 0 ) ;
110
+ let mut zeros = StepRng :: new ( 0 , 0 ) ;
126
111
assert_eq ! ( zeros. gen :: <f32 >( ) , 0.0 ) ;
127
112
assert_eq ! ( zeros. gen :: <f64 >( ) , 0.0 ) ;
128
113
129
- let mut one = ConstantRng ( 1 ) ;
114
+ let mut one = StepRng :: new ( 1 , 0 ) ;
130
115
assert_eq ! ( one. gen :: <f32 >( ) , EPSILON32 ) ;
131
116
assert_eq ! ( one. gen :: <f64 >( ) , EPSILON64 ) ;
132
117
133
- let mut max = ConstantRng ( ! 0 ) ;
118
+ let mut max = StepRng :: new ( ! 0 , 0 ) ;
134
119
assert_eq ! ( max. gen :: <f32 >( ) , 1.0 - EPSILON32 ) ;
135
120
assert_eq ! ( max. gen :: <f64 >( ) , 1.0 - EPSILON64 ) ;
136
121
}
137
122
138
123
#[ test]
139
124
fn fp_closed_edge_cases ( ) {
140
- let mut zeros = ConstantRng ( 0 ) ;
125
+ let mut zeros = StepRng :: new ( 0 , 0 ) ;
141
126
assert_eq ! ( zeros. sample:: <f32 , _>( Closed01 ) , 0.0 ) ;
142
127
assert_eq ! ( zeros. sample:: <f64 , _>( Closed01 ) , 0.0 ) ;
143
128
144
- let mut one = ConstantRng ( 1 ) ;
129
+ let mut one = StepRng :: new ( 1 , 0 ) ;
145
130
let one32 = one. sample :: < f32 , _ > ( Closed01 ) ;
146
131
let one64 = one. sample :: < f64 , _ > ( Closed01 ) ;
147
132
assert ! ( EPSILON32 < one32 && one32 < EPSILON32 * 1.01 ) ;
148
133
assert ! ( EPSILON64 < one64 && one64 < EPSILON64 * 1.01 ) ;
149
134
150
- let mut max = ConstantRng ( ! 0 ) ;
135
+ let mut max = StepRng :: new ( ! 0 , 0 ) ;
151
136
assert_eq ! ( max. sample:: <f32 , _>( Closed01 ) , 1.0 ) ;
152
137
assert_eq ! ( max. sample:: <f64 , _>( Closed01 ) , 1.0 ) ;
153
138
}
154
139
155
140
#[ test]
156
141
fn fp_open_edge_cases ( ) {
157
- let mut zeros = ConstantRng ( 0 ) ;
142
+ let mut zeros = StepRng :: new ( 0 , 0 ) ;
158
143
assert_eq ! ( zeros. sample:: <f32 , _>( Open01 ) , 0.0 + EPSILON32 / 2.0 ) ;
159
144
assert_eq ! ( zeros. sample:: <f64 , _>( Open01 ) , 0.0 + EPSILON64 / 2.0 ) ;
160
145
161
- let mut one = ConstantRng ( 1 ) ;
146
+ let mut one = StepRng :: new ( 1 , 0 ) ;
162
147
let one32 = one. sample :: < f32 , _ > ( Open01 ) ;
163
148
let one64 = one. sample :: < f64 , _ > ( Open01 ) ;
164
149
assert ! ( EPSILON32 < one32 && one32 < EPSILON32 * 2.0 ) ;
165
150
assert ! ( EPSILON64 < one64 && one64 < EPSILON64 * 2.0 ) ;
166
151
167
- let mut max = ConstantRng ( ! 0 ) ;
152
+ let mut max = StepRng :: new ( ! 0 , 0 ) ;
168
153
assert_eq ! ( max. sample:: <f32 , _>( Open01 ) , 1.0 - EPSILON32 / 2.0 ) ;
169
154
assert_eq ! ( max. sample:: <f64 , _>( Open01 ) , 1.0 - EPSILON64 / 2.0 ) ;
170
155
}
0 commit comments