@@ -293,21 +293,7 @@ pub trait Rng {
293
293
}
294
294
}
295
295
296
- /// Shuffle a vec
297
- ///
298
- /// # Example
299
- ///
300
- /// ```rust
301
- /// use rand::{task_rng, Rng};
302
- ///
303
- /// println!("{}", task_rng().shuffle(vec!(1,2,3)));
304
- /// ```
305
- fn shuffle < T > ( & mut self , mut values : Vec < T > ) -> Vec < T > {
306
- self . shuffle_mut ( values. as_mut_slice ( ) ) ;
307
- values
308
- }
309
-
310
- /// Shuffle a mutable vector in place.
296
+ /// Shuffle a mutable slice in place.
311
297
///
312
298
/// # Example
313
299
///
@@ -316,12 +302,12 @@ pub trait Rng {
316
302
///
317
303
/// let mut rng = task_rng();
318
304
/// let mut y = [1,2,3];
319
- /// rng.shuffle_mut (y);
320
- /// println!("{:? }", y);
321
- /// rng.shuffle_mut (y);
322
- /// println!("{:? }", y);
305
+ /// rng.shuffle (y);
306
+ /// println!("{}", y.as_slice() );
307
+ /// rng.shuffle (y);
308
+ /// println!("{}", y.as_slice() );
323
309
/// ```
324
- fn shuffle_mut < T > ( & mut self , values : & mut [ T ] ) {
310
+ fn shuffle < T > ( & mut self , values : & mut [ T ] ) {
325
311
let mut i = values. len ( ) ;
326
312
while i >= 2 u {
327
313
// invariant: elements with index >= i have been locked in place.
@@ -331,6 +317,12 @@ pub trait Rng {
331
317
}
332
318
}
333
319
320
+ /// Shuffle a mutable slice in place.
321
+ #[ deprecated="renamed to `.shuffle`" ]
322
+ fn shuffle_mut < T > ( & mut self , values : & mut [ T ] ) {
323
+ self . shuffle ( values)
324
+ }
325
+
334
326
/// Randomly sample up to `n` elements from an iterator.
335
327
///
336
328
/// # Example
@@ -811,16 +803,28 @@ mod test {
811
803
#[ test]
812
804
fn test_shuffle ( ) {
813
805
let mut r = task_rng ( ) ;
814
- let empty = Vec :: < int > :: new ( ) ;
815
- assert_eq ! ( r. shuffle( vec!( ) ) , empty) ;
816
- assert_eq ! ( r. shuffle( vec!( 1 , 1 , 1 ) ) , vec!( 1 , 1 , 1 ) ) ;
806
+ let mut empty: & mut [ int ] = & mut [ ] ;
807
+ r. shuffle ( empty) ;
808
+ let mut one = [ 1 ] ;
809
+ r. shuffle ( one) ;
810
+ assert_eq ! ( one. as_slice( ) , & [ 1 ] ) ;
811
+
812
+ let mut two = [ 1 , 2 ] ;
813
+ r. shuffle ( two) ;
814
+ assert ! ( two == [ 1 , 2 ] || two == [ 2 , 1 ] ) ;
815
+
816
+ let mut x = [ 1 , 1 , 1 ] ;
817
+ r. shuffle ( x) ;
818
+ assert_eq ! ( x. as_slice( ) , & [ 1 , 1 , 1 ] ) ;
817
819
}
818
820
819
821
#[ test]
820
822
fn test_task_rng ( ) {
821
823
let mut r = task_rng ( ) ;
822
824
r. gen :: < int > ( ) ;
823
- assert_eq ! ( r. shuffle( vec!( 1 , 1 , 1 ) ) , vec!( 1 , 1 , 1 ) ) ;
825
+ let mut v = [ 1 , 1 , 1 ] ;
826
+ r. shuffle ( v) ;
827
+ assert_eq ! ( v. as_slice( ) , & [ 1 , 1 , 1 ] ) ;
824
828
assert_eq ! ( r. gen_range( 0 u, 1 u) , 0 u) ;
825
829
}
826
830
@@ -934,7 +938,7 @@ mod bench {
934
938
let mut rng = XorShiftRng :: new ( ) . unwrap ( ) ;
935
939
let x : & mut [ uint ] = [ 1 , ..100 ] ;
936
940
bh. iter ( || {
937
- rng. shuffle_mut ( x) ;
941
+ rng. shuffle ( x) ;
938
942
} )
939
943
}
940
944
}
0 commit comments