提交 fb923c7d 编写于 作者: H Huon Wilson

std: merge rand::{Rng,RngUtil} with default methods.

Also, documentation & general clean-up:
- remove `gen_char_from`: better served by `sample` or `choose`.
- `gen_bytes` generalised to `gen_vec`.
- `gen_int_range`/`gen_uint_range` merged into `gen_integer_range` and
  made to be properly uniformly distributed. Fixes #8644.

Minor adjustments to other functions.
上级 884c1e11
......@@ -311,11 +311,11 @@ fn test_from_base64_invalid_padding() {
#[test]
fn test_base64_random() {
use std::rand::{task_rng, random, RngUtil};
use std::rand::{task_rng, random, Rng};
use std::vec;
do 1000.times {
let times = task_rng().gen_uint_range(1, 100);
let times = task_rng().gen_integer_range(1u, 100);
let v = vec::from_fn(times, |_| random::<u8>());
assert_eq!(v.to_base64(STANDARD).from_base64().unwrap(), v);
}
......
......@@ -43,7 +43,7 @@ pub trait Deque<T> : Mutable {
mod bench {
use std::container::MutableMap;
use std::{vec, rand};
use std::rand::RngUtil;
use std::rand::Rng;
use test::BenchHarness;
pub fn insert_rand_n<M:MutableMap<uint,uint>>(n: uint,
......
......@@ -347,8 +347,7 @@ fn standard_padding(&mut self, rem: uint, func: &fn(&[u8])) {
#[cfg(test)]
mod test {
use std::rand::IsaacRng;
use std::rand::RngUtil;
use std::rand::{IsaacRng, Rng};
use std::vec;
use cryptoutil::{add_bytes_to_bits, add_bytes_to_bits_tuple};
......@@ -365,7 +364,7 @@ pub fn test_digest_1million_random<D: Digest>(digest: &mut D, blocksize: uint, e
digest.reset();
while count < total_size {
let next: uint = rng.gen_uint_range(0, 2 * blocksize + 1);
let next: uint = rng.gen_integer_range(0, 2 * blocksize + 1);
let remaining = total_size - count;
let size = if next > remaining { remaining } else { next };
digest.input(buffer.slice_to(size));
......
......@@ -106,15 +106,15 @@ pub fn inflate_bytes_zlib(bytes: &[u8]) -> ~[u8] {
mod tests {
use super::*;
use std::rand;
use std::rand::RngUtil;
use std::rand::Rng;
#[test]
fn test_flate_round_trip() {
let mut r = rand::rng();
let mut words = ~[];
do 20.times {
let range = r.gen_uint_range(1, 10);
words.push(r.gen_bytes(range));
let range = r.gen_integer_range(1u, 10);
words.push(r.gen_vec::<u8>(range));
}
do 20.times {
let mut input = ~[];
......
......@@ -23,7 +23,7 @@
use std::int;
use std::num;
use std::num::{IntConvertible, Zero, One, ToStrRadix, FromStrRadix, Orderable};
use std::rand::{Rng, RngUtil};
use std::rand::Rng;
use std::str;
use std::uint;
use std::vec;
......
......@@ -909,7 +909,7 @@ fn ile(x: &(&'static str), y: &(&'static str)) -> bool
mod test_tim_sort {
use sort::tim_sort;
use std::rand::RngUtil;
use std::rand::Rng;
use std::rand;
use std::vec;
......@@ -1008,7 +1008,7 @@ mod big_tests {
use sort::*;
use std::rand::RngUtil;
use std::rand::Rng;
use std::rand;
use std::vec;
......@@ -1069,8 +1069,8 @@ fn isSorted<T:Ord>(arr: &[T]) {
isSorted(arr);
do 3.times {
let i1 = rng.gen_uint_range(0, n);
let i2 = rng.gen_uint_range(0, n);
let i1 = rng.gen_integer_range(0u, n);
let i2 = rng.gen_integer_range(0u, n);
arr.swap(i1, i2);
}
tim_sort(arr); // 3sort
......@@ -1088,7 +1088,7 @@ fn isSorted<T:Ord>(arr: &[T]) {
isSorted(arr);
do (n/100).times {
let idx = rng.gen_uint_range(0, n);
let idx = rng.gen_integer_range(0u, n);
arr[idx] = rng.gen();
}
tim_sort(arr);
......@@ -1141,8 +1141,8 @@ fn isSorted<T:Ord>(arr: &[@T]) {
isSorted(arr);
do 3.times {
let i1 = rng.gen_uint_range(0, n);
let i2 = rng.gen_uint_range(0, n);
let i1 = rng.gen_integer_range(0u, n);
let i2 = rng.gen_integer_range(0u, n);
arr.swap(i1, i2);
}
tim_sort(arr); // 3sort
......@@ -1160,7 +1160,7 @@ fn isSorted<T:Ord>(arr: &[@T]) {
isSorted(arr);
do (n/100).times {
let idx = rng.gen_uint_range(0, n);
let idx = rng.gen_integer_range(0u, n);
arr[idx] = @rng.gen();
}
tim_sort(arr);
......
......@@ -12,7 +12,7 @@
use std::os;
use std::rand::RngUtil;
use std::rand::Rng;
use std::rand;
/// Attempts to make a temporary directory inside of `tmpdir` whose name will
......@@ -20,7 +20,7 @@
pub fn mkdtemp(tmpdir: &Path, suffix: &str) -> Option<Path> {
let mut r = rand::rng();
for _ in range(0u, 1000) {
let p = tmpdir.push(r.gen_str(16) + suffix);
let p = tmpdir.push(r.gen_ascii_str(16) + suffix);
if os::make_dir(&p, 0x1c0) { // 700
return Some(p);
}
......
......@@ -874,7 +874,7 @@ mod test_treemap {
use super::*;
use std::rand::RngUtil;
use std::rand::Rng;
use std::rand;
#[test]
......@@ -1028,7 +1028,7 @@ fn test_rand_int() {
}
do 30.times {
let r = rng.gen_uint_range(0, ctrl.len());
let r = rng.gen_integer_range(0, ctrl.len());
let (key, _) = ctrl.remove(r);
assert!(map.remove(&key));
check_structure(&map);
......
......@@ -62,7 +62,7 @@ fn main() {
use std::container::Container;
use std::to_str::ToStr;
use std::rand;
use std::rand::RngUtil;
use std::rand::Rng;
use std::cmp::Eq;
use std::cast::{transmute,transmute_copy};
......@@ -170,7 +170,7 @@ pub fn new(v: UuidVersion) -> Option<Uuid> {
/// of random numbers. Use the rand::Rand trait to supply
/// a custom generator if required.
pub fn new_v4() -> Uuid {
let ub = rand::task_rng().gen_bytes(16);
let ub = rand::task_rng().gen_vec(16);
let mut uuid = Uuid{ bytes: [0, .. 16] };
vec::bytes::copy_memory(uuid.bytes, ub, 16);
uuid.set_variant(VariantRFC4122);
......@@ -488,7 +488,7 @@ fn equals(&self, other: &Uuid) -> bool {
impl rand::Rand for Uuid {
#[inline]
fn rand<R: rand::Rng>(rng: &mut R) -> Uuid {
let ub = rng.gen_bytes(16);
let ub = rng.gen_vec(16);
let mut uuid = Uuid{ bytes: [0, .. 16] };
vec::bytes::copy_memory(uuid.bytes, ub, 16);
uuid.set_variant(VariantRFC4122);
......
......@@ -24,7 +24,7 @@
use iter::{FilterMap, Chain, Repeat, Zip};
use num;
use option::{None, Option, Some};
use rand::RngUtil;
use rand::Rng;
use rand;
use uint;
use util::replace;
......
......@@ -734,7 +734,7 @@ fn from_str_issue7588() {
#[cfg(test)]
mod bench {
use extra::test::BenchHarness;
use rand::{XorShiftRng,RngUtil};
use rand::{XorShiftRng, Rng};
use float;
use to_str::ToStr;
......
......@@ -1718,7 +1718,7 @@ mod tests {
use os::{remove_file, setenv, unsetenv};
use os;
use path::Path;
use rand::RngUtil;
use rand::Rng;
use rand;
use run;
use str::StrSlice;
......@@ -1738,7 +1738,7 @@ pub fn test_args() {
fn make_rand_name() -> ~str {
let mut rng = rand::rng();
let n = ~"TEST" + rng.gen_str(10u);
let n = ~"TEST" + rng.gen_ascii_str(10u);
assert!(getenv(n).is_none());
n
}
......
此差异已折叠。
......@@ -1095,7 +1095,7 @@ fn shared_port_close() {
#[test]
fn megapipe_stress() {
use rand;
use rand::RngUtil;
use rand::Rng;
if util::limit_thread_creation_due_to_osx_and_valgrind() { return; }
......@@ -1106,7 +1106,7 @@ fn megapipe_stress() {
let total = stress_factor() + 10;
let mut rng = rand::rng();
do total.times {
let msgs = rng.gen_uint_range(0, 10);
let msgs = rng.gen_integer_range(0u, 10);
let pipe_clone = pipe.clone();
let end_chan_clone = end_chan.clone();
do spawntask_random {
......
......@@ -26,7 +26,7 @@
use rt::rtio::{RemoteCallback, PausibleIdleCallback};
use borrow::{to_uint};
use cell::Cell;
use rand::{XorShiftRng, RngUtil};
use rand::{XorShiftRng, Rng};
use iter::range;
use vec::{OwnedVector};
......@@ -391,7 +391,7 @@ fn find_work(&mut self) -> Option<~Task> {
fn try_steals(&mut self) -> Option<~Task> {
let work_queues = &mut self.work_queues;
let len = work_queues.len();
let start_index = self.rng.gen_uint_range(0, len);
let start_index = self.rng.gen_integer_range(0, len);
for index in range(0, len).map(|i| (i + start_index) % len) {
match work_queues[index].steal() {
Some(task) => {
......
......@@ -15,7 +15,7 @@
use extra::time::precise_time_s;
use std::io;
use std::os;
use std::rand::RngUtil;
use std::rand::Rng;
use std::rand;
use std::str;
use std::util;
......@@ -85,7 +85,7 @@ fn vec_plus() {
let mut v = ~[];
let mut i = 0;
while i < 1500 {
let rv = vec::from_elem(r.gen_uint_range(0, i + 1), i);
let rv = vec::from_elem(r.gen_integer_range(0u, i + 1), i);
if r.gen() {
v.push_all_move(rv);
} else {
......@@ -101,7 +101,7 @@ fn vec_append() {
let mut v = ~[];
let mut i = 0;
while i < 1500 {
let rv = vec::from_elem(r.gen_uint_range(0, i + 1), i);
let rv = vec::from_elem(r.gen_integer_range(0u, i + 1), i);
if r.gen() {
v = vec::append(v, rv);
}
......@@ -117,7 +117,7 @@ fn vec_push_all() {
let mut v = ~[];
for i in range(0u, 1500) {
let mut rv = vec::from_elem(r.gen_uint_range(0, i + 1), i);
let mut rv = vec::from_elem(r.gen_integer_range(0u, i + 1), i);
if r.gen() {
v.push_all(rv);
}
......
// Perlin noise benchmark from https://gist.github.com/1170424
use std::float;
use std::rand::{Rng, RngUtil};
use std::rand::Rng;
use std::rand;
struct Vec2 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册