@@ -266,37 +266,39 @@ pub trait Rng {
266
266
0123456789") ;
267
267
let mut s = StrBuf :: with_capacity ( len) ;
268
268
for _ in range ( 0 , len) {
269
- s. push_char ( self . choose ( GEN_ASCII_STR_CHARSET ) as char )
269
+ s. push_char ( * self . choose ( GEN_ASCII_STR_CHARSET ) . unwrap ( ) as char )
270
270
}
271
271
s
272
272
}
273
273
274
- /// Choose an item randomly, failing if `values` is empty.
275
- fn choose < T : Clone > ( & mut self , values : & [ T ] ) -> T {
276
- self . choose_option ( values) . expect ( "Rng.choose: `values` is empty" ) . clone ( )
277
- }
278
-
279
- /// Choose `Some(&item)` randomly, returning `None` if values is
280
- /// empty.
274
+ /// Return a random element from `values`.
275
+ ///
276
+ /// Return `None` if `values` is empty.
281
277
///
282
278
/// # Example
283
279
///
284
- /// ```rust
280
+ /// ```
285
281
/// use rand::{task_rng, Rng};
286
282
///
287
283
/// let choices = [1, 2, 4, 8, 16, 32];
288
284
/// let mut rng = task_rng();
289
- /// println!("{:? }", rng.choose_option (choices));
290
- /// println!("{:?}", rng.choose_option (choices.slice_to(0)));
285
+ /// println!("{}", rng.choose (choices));
286
+ /// assert_eq!( rng.choose (choices.slice_to(0)), None );
291
287
/// ```
292
- fn choose_option < ' a , T > ( & mut self , values : & ' a [ T ] ) -> Option < & ' a T > {
288
+ fn choose < ' a , T > ( & mut self , values : & ' a [ T ] ) -> Option < & ' a T > {
293
289
if values. is_empty ( ) {
294
290
None
295
291
} else {
296
292
Some ( & values[ self . gen_range ( 0 u, values. len ( ) ) ] )
297
293
}
298
294
}
299
295
296
+ /// Deprecated name for `choose()`.
297
+ #[ deprecated = "replaced by .choose()" ]
298
+ fn choose_option < ' a , T > ( & mut self , values : & ' a [ T ] ) -> Option < & ' a T > {
299
+ self . choose ( values)
300
+ }
301
+
300
302
/// Shuffle a mutable slice in place.
301
303
///
302
304
/// # Example
@@ -793,18 +795,10 @@ mod test {
793
795
#[ test]
794
796
fn test_choose ( ) {
795
797
let mut r = task_rng ( ) ;
796
- assert_eq ! ( r. choose( [ 1 , 1 , 1 ] ) , 1 ) ;
797
- }
798
+ assert_eq ! ( r. choose( [ 1 , 1 , 1 ] ) . map( |& x|x) , Some ( 1 ) ) ;
798
799
799
- #[ test]
800
- fn test_choose_option ( ) {
801
- let mut r = task_rng ( ) ;
802
800
let v: & [ int ] = & [ ] ;
803
- assert ! ( r. choose_option( v) . is_none( ) ) ;
804
-
805
- let i = 1 ;
806
- let v = [ 1 , 1 , 1 ] ;
807
- assert_eq ! ( r. choose_option( v) , Some ( & i) ) ;
801
+ assert_eq ! ( r. choose( v) , None ) ;
808
802
}
809
803
810
804
#[ test]
0 commit comments