diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2014-03-25 16:13:11 +1100 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2014-04-01 20:46:10 +1100 |
| commit | bc7a2d72a3fea324fa432de9b6ce6073302d3d8c (patch) | |
| tree | 5291b4abea25c42302facd2cf2387003060ae376 | |
| parent | 0e8c949786539375ccb6ebe4af968c7cf5cebe43 (diff) | |
| download | rust-bc7a2d72a3fea324fa432de9b6ce6073302d3d8c.tar.gz rust-bc7a2d72a3fea324fa432de9b6ce6073302d3d8c.zip | |
rand: bubble up IO messages futher.
The various ...Rng::new() methods can hit IO errors from the OSRng they use, and it seems sensible to expose them at a higher level. Unfortunately, writing e.g. `StdRng::new().unwrap()` gives a much poorer error message than if it failed internally, but this is a problem with all `IoResult`s.
| -rw-r--r-- | src/libcollections/deque.rs | 4 | ||||
| -rw-r--r-- | src/libgreen/sched.rs | 7 | ||||
| -rw-r--r-- | src/librand/distributions/exponential.rs | 2 | ||||
| -rw-r--r-- | src/librand/distributions/gamma.rs | 6 | ||||
| -rw-r--r-- | src/librand/distributions/normal.rs | 2 | ||||
| -rw-r--r-- | src/librand/isaac.rs | 38 | ||||
| -rw-r--r-- | src/librand/lib.rs | 58 | ||||
| -rw-r--r-- | src/librand/os.rs | 4 | ||||
| -rw-r--r-- | src/librand/reseeding.rs | 10 | ||||
| -rw-r--r-- | src/libstd/fmt/num.rs | 20 | ||||
| -rw-r--r-- | src/libstd/io/fs.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/strconv.rs | 22 | ||||
| -rw-r--r-- | src/libstd/rt/task.rs | 2 | ||||
| -rw-r--r-- | src/test/bench/noise.rs | 2 |
14 files changed, 102 insertions, 77 deletions
diff --git a/src/libcollections/deque.rs b/src/libcollections/deque.rs index 05df04d293f..6fd525bac2e 100644 --- a/src/libcollections/deque.rs +++ b/src/libcollections/deque.rs @@ -52,7 +52,7 @@ pub mod bench { map: &mut M, bh: &mut BenchHarness) { // setup - let mut rng = rand::XorShiftRng::new(); + let mut rng = rand::weak_rng(); map.clear(); for _ in range(0, n) { @@ -89,7 +89,7 @@ pub mod bench { map: &mut M, bh: &mut BenchHarness) { // setup - let mut rng = rand::XorShiftRng::new(); + let mut rng = rand::weak_rng(); let mut keys = slice::from_fn(n, |_| rng.gen::<uint>() % n); for k in keys.iter() { diff --git a/src/libgreen/sched.rs b/src/libgreen/sched.rs index 5571d4f4687..c38d136e939 100644 --- a/src/libgreen/sched.rs +++ b/src/libgreen/sched.rs @@ -966,7 +966,12 @@ impl ClosureConverter for UnsafeTaskReceiver { // worry there. #[cfg(windows)] fn new_sched_rng() -> XorShiftRng { - XorShiftRng::new() + match XorShiftRng::new() { + Ok(r) => r, + Err(e) => { + rtabort!("sched: failed to create seeded RNG: {}", e) + } + } } #[cfg(unix)] fn new_sched_rng() -> XorShiftRng { diff --git a/src/librand/distributions/exponential.rs b/src/librand/distributions/exponential.rs index 369828d5969..889c83b28c2 100644 --- a/src/librand/distributions/exponential.rs +++ b/src/librand/distributions/exponential.rs @@ -126,7 +126,7 @@ mod bench { #[bench] fn rand_exp(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); let mut exp = Exp::new(2.71828 * 3.14159); bh.iter(|| { diff --git a/src/librand/distributions/gamma.rs b/src/librand/distributions/gamma.rs index 029333cd788..70ab4c86455 100644 --- a/src/librand/distributions/gamma.rs +++ b/src/librand/distributions/gamma.rs @@ -370,14 +370,14 @@ mod bench { use self::test::BenchHarness; use std::mem::size_of; use distributions::IndependentSample; - use {StdRng, RAND_BENCH_N}; + use {XorShiftRng, RAND_BENCH_N}; use super::Gamma; #[bench] fn bench_gamma_large_shape(bh: &mut BenchHarness) { let gamma = Gamma::new(10., 1.0); - let mut rng = StdRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { @@ -390,7 +390,7 @@ mod bench { #[bench] fn bench_gamma_small_shape(bh: &mut BenchHarness) { let gamma = Gamma::new(0.1, 1.0); - let mut rng = StdRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { diff --git a/src/librand/distributions/normal.rs b/src/librand/distributions/normal.rs index 4c9567efc6e..e163714b005 100644 --- a/src/librand/distributions/normal.rs +++ b/src/librand/distributions/normal.rs @@ -193,7 +193,7 @@ mod bench { #[bench] fn rand_normal(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); let mut normal = Normal::new(-2.71828, 3.14159); bh.iter(|| { diff --git a/src/librand/isaac.rs b/src/librand/isaac.rs index 5021675c2d8..f985935e07b 100644 --- a/src/librand/isaac.rs +++ b/src/librand/isaac.rs @@ -11,6 +11,7 @@ //! The ISAAC random number generator. use {Rng, SeedableRng, OSRng}; +use std::io::IoResult; use std::iter::{range_step, Repeat}; use std::slice::raw; use std::mem; @@ -44,12 +45,13 @@ static EMPTY: IsaacRng = IsaacRng { impl IsaacRng { /// Create an ISAAC random number generator with a random seed. - pub fn new() -> IsaacRng { + /// + /// This reads randomness from the operating system (via `OSRng`) + /// which may fail, any error is propagated via the `IoResult` + /// return value. + pub fn new() -> IoResult<IsaacRng> { let mut rng = EMPTY; - let mut os_rng = match OSRng::new() { - Ok(r) => r, - Err(e) => fail!("IsaacRng::new: creating OSRng failed: {}", e) - }; + let mut os_rng = try!(OSRng::new()); unsafe { let ptr = rng.rsl.as_mut_ptr(); @@ -59,7 +61,7 @@ impl IsaacRng { } rng.init(true); - rng + Ok(rng) } /// Create an ISAAC random number generator using the default @@ -252,12 +254,14 @@ static EMPTY_64: Isaac64Rng = Isaac64Rng { impl Isaac64Rng { /// Create a 64-bit ISAAC random number generator with a random /// seed. - pub fn new() -> Isaac64Rng { + /// + /// This reads randomness from the operating system (via `OSRng`) + /// which may fail, any error is propagated via the `IoResult` + /// return value. + pub fn new() -> IoResult<Isaac64Rng> { let mut rng = EMPTY_64; - let mut os_rng = match OSRng::new() { - Ok(r) => r, - Err(e) => fail!("Isaac64Rng::new: creating OSRng failed: {}", e) - }; + let mut os_rng = try!(OSRng::new()); + unsafe { let ptr = rng.rsl.as_mut_ptr(); @@ -267,7 +271,7 @@ impl Isaac64Rng { } rng.init(true); - rng + Ok(rng) } /// Create a 64-bit ISAAC random number generator using the @@ -436,19 +440,19 @@ impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng { #[cfg(test)] mod test { use super::{IsaacRng, Isaac64Rng}; - use {Rng, SeedableRng, OSRng}; + use {Rng, SeedableRng, task_rng}; use std::slice; #[test] fn test_rng_32_rand_seeded() { - let s = OSRng::new().gen_vec::<u32>(256); + let s = task_rng().gen_vec::<u32>(256); let mut ra: IsaacRng = SeedableRng::from_seed(s.as_slice()); let mut rb: IsaacRng = SeedableRng::from_seed(s.as_slice()); assert_eq!(ra.gen_ascii_str(100u), rb.gen_ascii_str(100u)); } #[test] fn test_rng_64_rand_seeded() { - let s = OSRng::new().gen_vec::<u64>(256); + let s = task_rng().gen_vec::<u64>(256); let mut ra: Isaac64Rng = SeedableRng::from_seed(s.as_slice()); let mut rb: Isaac64Rng = SeedableRng::from_seed(s.as_slice()); assert_eq!(ra.gen_ascii_str(100u), rb.gen_ascii_str(100u)); @@ -471,7 +475,7 @@ mod test { #[test] fn test_rng_32_reseed() { - let s = OSRng::new().gen_vec::<u32>(256); + let s = task_rng().gen_vec::<u32>(256); let mut r: IsaacRng = SeedableRng::from_seed(s.as_slice()); let string1 = r.gen_ascii_str(100); @@ -482,7 +486,7 @@ mod test { } #[test] fn test_rng_64_reseed() { - let s = OSRng::new().gen_vec::<u64>(256); + let s = task_rng().gen_vec::<u64>(256); let mut r: Isaac64Rng = SeedableRng::from_seed(s.as_slice()); let string1 = r.gen_ascii_str(100); diff --git a/src/librand/lib.rs b/src/librand/lib.rs index 438075998f7..7924f438769 100644 --- a/src/librand/lib.rs +++ b/src/librand/lib.rs @@ -76,6 +76,7 @@ println!("{:?}", tuple_ptr) #[phase(syntax, link)] extern crate log; use std::cast; +use std::io::IoResult; use std::kinds::marker; use std::local_data; use std::str; @@ -401,7 +402,7 @@ pub trait SeedableRng<Seed>: Rng { /// appropriate. #[deprecated="use `task_rng` or `StdRng::new`"] pub fn rng() -> StdRng { - StdRng::new() + StdRng::new().unwrap() } /// The standard RNG. This is designed to be efficient on the current @@ -423,9 +424,12 @@ impl StdRng { /// number of random numbers, or doesn't need the utmost speed for /// generating each number, `task_rng` and/or `random` may be more /// appropriate. + /// + /// Reading the randomness from the OS may fail, and any error is + /// propagated via the `IoResult` return value. #[cfg(not(target_word_size="64"))] - pub fn new() -> StdRng { - StdRng { rng: IsaacRng::new() } + pub fn new() -> IoResult<StdRng> { + IsaacRng::new().map(|r| StdRng { rng: r }) } /// Create a randomly seeded instance of `StdRng`. /// @@ -435,9 +439,12 @@ impl StdRng { /// number of random numbers, or doesn't need the utmost speed for /// generating each number, `task_rng` and/or `random` may be more /// appropriate. + /// + /// Reading the randomness from the OS may fail, and any error is + /// propagated via the `IoResult` return value. #[cfg(target_word_size="64")] - pub fn new() -> StdRng { - StdRng { rng: Isaac64Rng::new() } + pub fn new() -> IoResult<StdRng> { + Isaac64Rng::new().map(|r| StdRng { rng: r }) } } @@ -475,7 +482,10 @@ impl<'a> SeedableRng<&'a [uint]> for StdRng { /// This will read randomness from the operating system to seed the /// generator. pub fn weak_rng() -> XorShiftRng { - XorShiftRng::new() + match XorShiftRng::new() { + Ok(r) => r, + Err(e) => fail!("weak_rng: failed to create seeded RNG: {}", e) + } } /// An Xorshift[1] random number @@ -537,13 +547,10 @@ impl SeedableRng<[u32, .. 4]> for XorShiftRng { impl XorShiftRng { /// Create an xor shift random number generator with a random seed. - pub fn new() -> XorShiftRng { + pub fn new() -> IoResult<XorShiftRng> { let mut s = [0u8, ..16]; + let mut r = try!(OSRng::new()); loop { - let mut r = match OSRng::new() { - Ok(r) => r, - Err(e) => fail!("XorShiftRng::new: creating OSRng failed: {}", e) - }; r.fill_bytes(s); if !s.iter().all(|x| *x == 0) { @@ -551,7 +558,7 @@ impl XorShiftRng { } } let s: [u32, ..4] = unsafe { cast::transmute(s) }; - SeedableRng::from_seed(s) + Ok(SeedableRng::from_seed(s)) } } @@ -560,7 +567,10 @@ struct TaskRngReseeder; impl reseeding::Reseeder<StdRng> for TaskRngReseeder { fn reseed(&mut self, rng: &mut StdRng) { - *rng = StdRng::new(); + *rng = match StdRng::new() { + Ok(r) => r, + Err(e) => fail!("could not reseed task_rng: {}", e) + } } } static TASK_RNG_RESEED_THRESHOLD: uint = 32_768; @@ -597,7 +607,11 @@ local_data_key!(TASK_RNG_KEY: ~TaskRngInner) pub fn task_rng() -> TaskRng { local_data::get_mut(TASK_RNG_KEY, |rng| match rng { None => { - let mut rng = ~reseeding::ReseedingRng::new(StdRng::new(), + let r = match StdRng::new() { + Ok(r) => r, + Err(e) => fail!("could not initialize task_rng: {}", e) + }; + let mut rng = ~reseeding::ReseedingRng::new(r, TASK_RNG_RESEED_THRESHOLD, TaskRngReseeder); let ptr = &mut *rng as *mut TaskRngInner; @@ -680,7 +694,7 @@ pub struct Closed01<F>(F); #[cfg(test)] mod test { use std::slice; - use super::{Rng, task_rng, random, OSRng, SeedableRng, StdRng}; + use super::{Rng, task_rng, random, SeedableRng, StdRng}; struct ConstRng { i: u64 } impl Rng for ConstRng { @@ -842,7 +856,7 @@ mod test { #[test] fn test_std_rng_seeded() { - let s = OSRng::new().gen_vec::<uint>(256); + let s = task_rng().gen_vec::<uint>(256); let mut ra: StdRng = SeedableRng::from_seed(s.as_slice()); let mut rb: StdRng = SeedableRng::from_seed(s.as_slice()); assert_eq!(ra.gen_ascii_str(100u), rb.gen_ascii_str(100u)); @@ -850,7 +864,7 @@ mod test { #[test] fn test_std_rng_reseed() { - let s = OSRng::new().gen_vec::<uint>(256); + let s = task_rng().gen_vec::<uint>(256); let mut r: StdRng = SeedableRng::from_seed(s.as_slice()); let string1 = r.gen_ascii_str(100); @@ -873,7 +887,7 @@ mod bench { #[bench] fn rand_xorshift(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { rng.gen::<uint>(); @@ -884,7 +898,7 @@ mod bench { #[bench] fn rand_isaac(bh: &mut BenchHarness) { - let mut rng = IsaacRng::new(); + let mut rng = IsaacRng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { rng.gen::<uint>(); @@ -895,7 +909,7 @@ mod bench { #[bench] fn rand_isaac64(bh: &mut BenchHarness) { - let mut rng = Isaac64Rng::new(); + let mut rng = Isaac64Rng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { rng.gen::<uint>(); @@ -906,7 +920,7 @@ mod bench { #[bench] fn rand_std(bh: &mut BenchHarness) { - let mut rng = StdRng::new(); + let mut rng = StdRng::new().unwrap(); bh.iter(|| { for _ in range(0, RAND_BENCH_N) { rng.gen::<uint>(); @@ -917,7 +931,7 @@ mod bench { #[bench] fn rand_shuffle_100(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); let x : &mut[uint] = [1,..100]; bh.iter(|| { rng.shuffle_mut(x); diff --git a/src/librand/os.rs b/src/librand/os.rs index 396346b672f..fc0944fc7db 100644 --- a/src/librand/os.rs +++ b/src/librand/os.rs @@ -192,7 +192,7 @@ mod test { #[test] fn test_os_rng() { - let mut r = OSRng::new(); + let mut r = OSRng::new().unwrap(); r.next_u32(); r.next_u64(); @@ -214,7 +214,7 @@ mod test { // deschedule to attempt to interleave things as much // as possible (XXX: is this a good test?) - let mut r = OSRng::new(); + let mut r = OSRng::new().unwrap(); task::deschedule(); let mut v = [0u8, .. 1000]; diff --git a/src/librand/reseeding.rs b/src/librand/reseeding.rs index a64124e637e..131f081cba7 100644 --- a/src/librand/reseeding.rs +++ b/src/librand/reseeding.rs @@ -100,12 +100,12 @@ impl<S, R: SeedableRng<S>, Rsdr: Reseeder<R>> /// # Example /// /// ```rust -/// use rand::{Rng, SeedableRng}; +/// use rand::{Rng, SeedableRng, StdRng}; /// use rand::reseeding::{Reseeder, ReseedingRng}; /// /// struct TickTockReseeder { tick: bool } -/// impl Reseeder<rand::StdRng> for TickTockReseeder { -/// fn reseed(&mut self, rng: &mut rand::StdRng) { +/// impl Reseeder<StdRng> for TickTockReseeder { +/// fn reseed(&mut self, rng: &mut StdRng) { /// let val = if self.tick {0} else {1}; /// rng.reseed(&[val]); /// self.tick = !self.tick; @@ -113,7 +113,9 @@ impl<S, R: SeedableRng<S>, Rsdr: Reseeder<R>> /// } /// fn main() { /// let rsdr = TickTockReseeder { tick: true }; -/// let mut rng = ReseedingRng::new(rand::StdRng::new(), 10, rsdr); +/// +/// let inner = StdRng::new().unwrap(); +/// let mut rng = ReseedingRng::new(inner, 10, rsdr); /// /// // this will repeat, because it gets reseeded very regularly. /// println!("{}", rng.gen_ascii_str(100)); diff --git a/src/libstd/fmt/num.rs b/src/libstd/fmt/num.rs index 4b35a7596c9..85fffc5545a 100644 --- a/src/libstd/fmt/num.rs +++ b/src/libstd/fmt/num.rs @@ -400,31 +400,31 @@ mod bench { #[bench] fn format_bin(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:t}", rng.gen::<uint>()); }) } #[bench] fn format_oct(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:o}", rng.gen::<uint>()); }) } #[bench] fn format_dec(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:u}", rng.gen::<uint>()); }) } #[bench] fn format_hex(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:x}", rng.gen::<uint>()); }) } #[bench] fn format_base_36(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{}", radix(rng.gen::<uint>(), 36)); }) } } @@ -436,31 +436,31 @@ mod bench { #[bench] fn format_bin(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:t}", rng.gen::<int>()); }) } #[bench] fn format_oct(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:o}", rng.gen::<int>()); }) } #[bench] fn format_dec(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:d}", rng.gen::<int>()); }) } #[bench] fn format_hex(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{:x}", rng.gen::<int>()); }) } #[bench] fn format_base_36(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { format!("{}", radix(rng.gen::<int>(), 36)); }) } } diff --git a/src/libstd/io/fs.rs b/src/libstd/io/fs.rs index e66aa8c0046..63973584c1e 100644 --- a/src/libstd/io/fs.rs +++ b/src/libstd/io/fs.rs @@ -1285,7 +1285,7 @@ mod test { use rand::{StdRng, Rng}; let mut bytes = [0, ..1024]; - StdRng::new().fill_bytes(bytes); + StdRng::new().unwrap().fill_bytes(bytes); let tmpdir = tmpdir(); diff --git a/src/libstd/num/strconv.rs b/src/libstd/num/strconv.rs index 9f9a9ec8e2e..c516973ddd5 100644 --- a/src/libstd/num/strconv.rs +++ b/src/libstd/num/strconv.rs @@ -821,31 +821,31 @@ mod bench { #[bench] fn to_str_bin(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<uint>().to_str_radix(2); }) } #[bench] fn to_str_oct(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<uint>().to_str_radix(8); }) } #[bench] fn to_str_dec(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<uint>().to_str_radix(10); }) } #[bench] fn to_str_hex(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<uint>().to_str_radix(16); }) } #[bench] fn to_str_base_36(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<uint>().to_str_radix(36); }) } } @@ -857,31 +857,31 @@ mod bench { #[bench] fn to_str_bin(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<int>().to_str_radix(2); }) } #[bench] fn to_str_oct(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<int>().to_str_radix(8); }) } #[bench] fn to_str_dec(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<int>().to_str_radix(10); }) } #[bench] fn to_str_hex(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<int>().to_str_radix(16); }) } #[bench] fn to_str_base_36(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { rng.gen::<int>().to_str_radix(36); }) } } @@ -893,7 +893,7 @@ mod bench { #[bench] fn float_to_str(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new(); + let mut rng = XorShiftRng::new().unwrap(); bh.iter(|| { f64::to_str(rng.gen()); }) } } diff --git a/src/libstd/rt/task.rs b/src/libstd/rt/task.rs index ededc69c5a1..abaa91b12f8 100644 --- a/src/libstd/rt/task.rs +++ b/src/libstd/rt/task.rs @@ -434,7 +434,7 @@ mod test { #[test] fn rng() { use rand::{StdRng, Rng}; - let mut r = StdRng::new(); + let mut r = StdRng::new().unwrap(); let _ = r.next_u32(); } diff --git a/src/test/bench/noise.rs b/src/test/bench/noise.rs index 4954f083b36..babf3f737fb 100644 --- a/src/test/bench/noise.rs +++ b/src/test/bench/noise.rs @@ -41,7 +41,7 @@ struct Noise2DContext { impl Noise2DContext { fn new() -> Noise2DContext { - let mut rng = StdRng::new(); + let mut rng = StdRng::new().unwrap(); let mut rgradients = [Vec2 { x: 0.0, y: 0.0 }, ..256]; for x in rgradients.mut_iter() { |
