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.
This commit is contained in:
parent
0e8c949786
commit
bc7a2d72a3
|
@ -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() {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(|| {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(|| {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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)); })
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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()); })
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue