diff options
Diffstat (limited to 'src/test/bench')
30 files changed, 208 insertions, 253 deletions
diff --git a/src/test/bench/core-map.rs b/src/test/bench/core-map.rs index 12c95e4c60c..4909d84a34f 100644 --- a/src/test/bench/core-map.rs +++ b/src/test/bench/core-map.rs @@ -11,7 +11,7 @@ #![feature(unboxed_closures)] use std::collections::{BTreeMap, HashMap, HashSet}; -use std::os; +use std::env; use std::rand::{Rng, IsaacRng, SeedableRng}; use std::time::Duration; @@ -20,33 +20,33 @@ fn timed<F>(label: &str, f: F) where F: FnMut() { } trait MutableMap { - fn insert(&mut self, k: uint, v: uint); - fn remove(&mut self, k: &uint) -> bool; - fn find(&self, k: &uint) -> Option<&uint>; + fn insert(&mut self, k: usize, v: usize); + fn remove(&mut self, k: &usize) -> bool; + fn find(&self, k: &usize) -> Option<&usize>; } -impl MutableMap for BTreeMap<uint, uint> { - fn insert(&mut self, k: uint, v: uint) { self.insert(k, v); } - fn remove(&mut self, k: &uint) -> bool { self.remove(k).is_some() } - fn find(&self, k: &uint) -> Option<&uint> { self.get(k) } +impl MutableMap for BTreeMap<usize, usize> { + fn insert(&mut self, k: usize, v: usize) { self.insert(k, v); } + fn remove(&mut self, k: &usize) -> bool { self.remove(k).is_some() } + fn find(&self, k: &usize) -> Option<&usize> { self.get(k) } } -impl MutableMap for HashMap<uint, uint> { - fn insert(&mut self, k: uint, v: uint) { self.insert(k, v); } - fn remove(&mut self, k: &uint) -> bool { self.remove(k).is_some() } - fn find(&self, k: &uint) -> Option<&uint> { self.get(k) } +impl MutableMap for HashMap<usize, usize> { + fn insert(&mut self, k: usize, v: usize) { self.insert(k, v); } + fn remove(&mut self, k: &usize) -> bool { self.remove(k).is_some() } + fn find(&self, k: &usize) -> Option<&usize> { self.get(k) } } -fn ascending<M: MutableMap>(map: &mut M, n_keys: uint) { +fn ascending<M: MutableMap>(map: &mut M, n_keys: usize) { println!(" Ascending integers:"); timed("insert", || { - for i in 0u..n_keys { + for i in 0..n_keys { map.insert(i, i + 1); } }); timed("search", || { - for i in 0u..n_keys { + for i in 0..n_keys { assert_eq!(map.find(&i).unwrap(), &(i + 1)); } }); @@ -58,7 +58,7 @@ fn ascending<M: MutableMap>(map: &mut M, n_keys: uint) { }); } -fn descending<M: MutableMap>(map: &mut M, n_keys: uint) { +fn descending<M: MutableMap>(map: &mut M, n_keys: usize) { println!(" Descending integers:"); timed("insert", || { @@ -80,32 +80,31 @@ fn descending<M: MutableMap>(map: &mut M, n_keys: uint) { }); } -fn vector<M: MutableMap>(map: &mut M, n_keys: uint, dist: &[uint]) { +fn vector<M: MutableMap>(map: &mut M, n_keys: usize, dist: &[usize]) { timed("insert", || { - for i in 0u..n_keys { + for i in 0..n_keys { map.insert(dist[i], i + 1); } }); timed("search", || { - for i in 0u..n_keys { + for i in 0..n_keys { assert_eq!(map.find(&dist[i]).unwrap(), &(i + 1)); } }); timed("remove", || { - for i in 0u..n_keys { + for i in 0..n_keys { assert!(map.remove(&dist[i])); } }); } fn main() { - let args = os::args(); - let args = args; + let mut args = env::args(); let n_keys = { if args.len() == 2 { - args[1].parse::<uint>().unwrap() + args.nth(1).unwrap().parse::<usize>().unwrap() } else { 1000000 } @@ -131,18 +130,18 @@ fn main() { println!("{}", "\nBTreeMap:"); { - let mut map: BTreeMap<uint,uint> = BTreeMap::new(); + let mut map: BTreeMap<usize,usize> = BTreeMap::new(); ascending(&mut map, n_keys); } { - let mut map: BTreeMap<uint,uint> = BTreeMap::new(); + let mut map: BTreeMap<usize,usize> = BTreeMap::new(); descending(&mut map, n_keys); } { println!(" Random integers:"); - let mut map: BTreeMap<uint,uint> = BTreeMap::new(); + let mut map: BTreeMap<usize,usize> = BTreeMap::new(); vector(&mut map, n_keys, &rand); } @@ -150,18 +149,18 @@ fn main() { println!("{}", "\nHashMap:"); { - let mut map: HashMap<uint,uint> = HashMap::new(); + let mut map: HashMap<usize,usize> = HashMap::new(); ascending(&mut map, n_keys); } { - let mut map: HashMap<uint,uint> = HashMap::new(); + let mut map: HashMap<usize,usize> = HashMap::new(); descending(&mut map, n_keys); } { println!(" Random integers:"); - let mut map: HashMap<uint,uint> = HashMap::new(); + let mut map: HashMap<usize,usize> = HashMap::new(); vector(&mut map, n_keys, &rand); } } diff --git a/src/test/bench/core-set.rs b/src/test/bench/core-set.rs index 33ac8a43b43..1d440c4540c 100644 --- a/src/test/bench/core-set.rs +++ b/src/test/bench/core-set.rs @@ -20,7 +20,7 @@ use std::collections::BitvSet; use std::collections::HashSet; use std::collections::hash_map::Hasher; use std::hash::Hash; -use std::os; +use std::env; use std::time::Duration; struct Results { @@ -53,29 +53,29 @@ impl<T: Ord> MutableSet<T> for BTreeSet<T> { fn remove(&mut self, k: &T) -> bool { self.remove(k) } fn contains(&self, k: &T) -> bool { self.contains(k) } } -impl MutableSet<uint> for BitvSet { - fn insert(&mut self, k: uint) { self.insert(k); } - fn remove(&mut self, k: &uint) -> bool { self.remove(k) } - fn contains(&self, k: &uint) -> bool { self.contains(k) } +impl MutableSet<usize> for BitvSet { + fn insert(&mut self, k: usize) { self.insert(k); } + fn remove(&mut self, k: &usize) -> bool { self.remove(k) } + fn contains(&self, k: &usize) -> bool { self.contains(k) } } impl Results { - pub fn bench_int<T:MutableSet<uint>, + pub fn bench_int<T:MutableSet<usize>, R:rand::Rng, F:FnMut() -> T>( &mut self, rng: &mut R, - num_keys: uint, - rand_cap: uint, + num_keys: usize, + rand_cap: usize, mut f: F) { { let mut set = f(); timed(&mut self.sequential_ints, || { - for i in 0u..num_keys { + for i in 0..num_keys { set.insert(i); } - for i in 0u..num_keys { + for i in 0..num_keys { assert!(set.contains(&i)); } }) @@ -85,19 +85,19 @@ impl Results { let mut set = f(); timed(&mut self.random_ints, || { for _ in 0..num_keys { - set.insert(rng.gen::<uint>() % rand_cap); + set.insert(rng.gen::<usize>() % rand_cap); } }) } { let mut set = f(); - for i in 0u..num_keys { + for i in 0..num_keys { set.insert(i); } timed(&mut self.delete_ints, || { - for i in 0u..num_keys { + for i in 0..num_keys { assert!(set.remove(&i)); } }) @@ -109,16 +109,16 @@ impl Results { F:FnMut() -> T>( &mut self, rng: &mut R, - num_keys: uint, + num_keys: usize, mut f: F) { { let mut set = f(); timed(&mut self.sequential_strings, || { - for i in 0u..num_keys { + for i in 0..num_keys { set.insert(i.to_string()); } - for i in 0u..num_keys { + for i in 0..num_keys { assert!(set.contains(&i.to_string())); } }) @@ -128,7 +128,7 @@ impl Results { let mut set = f(); timed(&mut self.random_strings, || { for _ in 0..num_keys { - let s = rng.gen::<uint>().to_string(); + let s = rng.gen::<usize>().to_string(); set.insert(s); } }) @@ -136,11 +136,11 @@ impl Results { { let mut set = f(); - for i in 0u..num_keys { + for i in 0..num_keys { set.insert(i.to_string()); } timed(&mut self.delete_strings, || { - for i in 0u..num_keys { + for i in 0..num_keys { assert!(set.remove(&i.to_string())); } }) @@ -179,11 +179,10 @@ fn empty_results() -> Results { } fn main() { - let args = os::args(); - let args = args; + let mut args = env::args(); let num_keys = { if args.len() == 2 { - args[1].parse::<uint>().unwrap() + args.nth(1).unwrap().parse::<usize>().unwrap() } else { 100 // woefully inadequate for any real measurement } @@ -196,7 +195,7 @@ fn main() { let mut rng: rand::IsaacRng = rand::SeedableRng::from_seed(seed); let mut results = empty_results(); results.bench_int(&mut rng, num_keys, max, || { - let s: HashSet<uint> = HashSet::new(); + let s: HashSet<usize> = HashSet::new(); s }); results.bench_str(&mut rng, num_keys, || { @@ -210,7 +209,7 @@ fn main() { let mut rng: rand::IsaacRng = rand::SeedableRng::from_seed(seed); let mut results = empty_results(); results.bench_int(&mut rng, num_keys, max, || { - let s: BTreeSet<uint> = BTreeSet::new(); + let s: BTreeSet<usize> = BTreeSet::new(); s }); results.bench_str(&mut rng, num_keys, || { diff --git a/src/test/bench/core-std.rs b/src/test/bench/core-std.rs index 00f8feacff8..2409487c04f 100644 --- a/src/test/bench/core-std.rs +++ b/src/test/bench/core-std.rs @@ -16,7 +16,6 @@ use std::old_io::File; use std::iter::repeat; use std::mem::swap; -use std::os; use std::env; use std::rand::Rng; use std::rand; @@ -25,8 +24,7 @@ use std::time::Duration; use std::vec; fn main() { - let argv = os::args(); - let _tests = &argv[1..argv.len()]; + let argv: Vec<String> = env::args().collect(); macro_rules! bench { ($id:ident) => diff --git a/src/test/bench/core-uint-to-str.rs b/src/test/bench/core-uint-to-str.rs index 90cc222c3de..57889053e3c 100644 --- a/src/test/bench/core-uint-to-str.rs +++ b/src/test/bench/core-uint-to-str.rs @@ -8,17 +8,16 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::os; use std::env; fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "10000000".to_string()) } else if args.len() <= 1u { vec!("".to_string(), "100000".to_string()) } else { - args.into_iter().collect() + args.collect() }; let n = args[1].parse().unwrap(); diff --git a/src/test/bench/msgsend-pipes-shared.rs b/src/test/bench/msgsend-pipes-shared.rs index 4e9c2fe99bd..208f088442b 100644 --- a/src/test/bench/msgsend-pipes-shared.rs +++ b/src/test/bench/msgsend-pipes-shared.rs @@ -19,9 +19,8 @@ // version. use std::sync::mpsc::{channel, Sender, Receiver}; -use std::os; use std::env; -use std::thread::Thread; +use std::thread; use std::time::Duration; fn move_out<T>(_x: T) {} @@ -64,7 +63,7 @@ fn run(args: &[String]) { let mut worker_results = Vec::new(); for _ in 0u..workers { let to_child = to_child.clone(); - worker_results.push(Thread::scoped(move|| { + worker_results.push(thread::spawn(move|| { for _ in 0u..size / workers { //println!("worker {}: sending {} bytes", i, num_bytes); to_child.send(request::bytes(num_bytes)).unwrap(); @@ -72,7 +71,7 @@ fn run(args: &[String]) { //println!("worker {} exiting", i); })); } - Thread::spawn(move|| { + thread::spawn(move|| { server(&from_parent, &to_parent); }); @@ -94,13 +93,13 @@ fn run(args: &[String]) { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "1000000".to_string(), "10000".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "10000".to_string(), "4".to_string()) } else { - args.into_iter().map(|x| x.to_string()).collect() + args.map(|x| x.to_string()).collect() }; println!("{:?}", args); diff --git a/src/test/bench/msgsend-pipes.rs b/src/test/bench/msgsend-pipes.rs index 2530e8bd907..76b91f0295b 100644 --- a/src/test/bench/msgsend-pipes.rs +++ b/src/test/bench/msgsend-pipes.rs @@ -15,9 +15,8 @@ // I *think* it's the same, more or less. use std::sync::mpsc::{channel, Sender, Receiver}; -use std::os; use std::env; -use std::thread::Thread; +use std::thread; use std::time::Duration; enum request { @@ -57,7 +56,7 @@ fn run(args: &[String]) { let mut worker_results = Vec::new(); let from_parent = if workers == 1 { let (to_child, from_parent) = channel(); - worker_results.push(Thread::scoped(move|| { + worker_results.push(thread::spawn(move|| { for _ in 0u..size / workers { //println!("worker {}: sending {} bytes", i, num_bytes); to_child.send(request::bytes(num_bytes)); @@ -69,7 +68,7 @@ fn run(args: &[String]) { let (to_child, from_parent) = channel(); for _ in 0u..workers { let to_child = to_child.clone(); - worker_results.push(Thread::scoped(move|| { + worker_results.push(thread::spawn(move|| { for _ in 0u..size / workers { //println!("worker {}: sending {} bytes", i, num_bytes); to_child.send(request::bytes(num_bytes)); @@ -79,7 +78,7 @@ fn run(args: &[String]) { } from_parent }; - Thread::spawn(move|| { + thread::spawn(move|| { server(&from_parent, &to_parent); }); @@ -101,13 +100,13 @@ fn run(args: &[String]) { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "1000000".to_string(), "8".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "10000".to_string(), "4".to_string()) } else { - args.clone().into_iter().map(|x| x.to_string()).collect() + args.map(|x| x.to_string()).collect() }; println!("{:?}", args); diff --git a/src/test/bench/msgsend-ring-mutex-arcs.rs b/src/test/bench/msgsend-ring-mutex-arcs.rs index a935a6b3086..168fe929e12 100644 --- a/src/test/bench/msgsend-ring-mutex-arcs.rs +++ b/src/test/bench/msgsend-ring-mutex-arcs.rs @@ -18,7 +18,6 @@ // no-pretty-expanded FIXME #15189 // ignore-lexer-test FIXME #15679 -use std::os; use std::env; use std::sync::{Arc, Future, Mutex, Condvar}; use std::time::Duration; @@ -64,13 +63,13 @@ fn thread_ring(i: uint, count: uint, num_chan: pipe, num_port: pipe) { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "100".to_string(), "10000".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "10".to_string(), "100".to_string()) } else { - args.clone().into_iter().collect() + args.collect() }; let num_tasks = args[1].parse::<uint>().unwrap(); diff --git a/src/test/bench/rt-messaging-ping-pong.rs b/src/test/bench/rt-messaging-ping-pong.rs index e4e8b4a6e6e..b9512324e42 100644 --- a/src/test/bench/rt-messaging-ping-pong.rs +++ b/src/test/bench/rt-messaging-ping-pong.rs @@ -18,24 +18,24 @@ // except according to those terms. use std::sync::mpsc::channel; -use std::os; -use std::thread::Thread; +use std::env; +use std::thread; // This is a simple bench that creates M pairs of tasks. These // tasks ping-pong back and forth over a pair of streams. This is a // canonical message-passing benchmark as it heavily strains message // passing and almost nothing else. -fn ping_pong_bench(n: uint, m: uint) { +fn ping_pong_bench(n: usize, m: usize) { // Create pairs of tasks that pingpong back and forth. - fn run_pair(n: uint) { + fn run_pair(n: usize) { // Create a channel: A->B let (atx, arx) = channel(); // Create a channel: B->A let (btx, brx) = channel(); - let guard_a = Thread::scoped(move|| { + let guard_a = thread::spawn(move|| { let (tx, rx) = (atx, brx); for _ in 0..n { tx.send(()).unwrap(); @@ -43,7 +43,7 @@ fn ping_pong_bench(n: uint, m: uint) { } }); - let guard_b = Thread::scoped(move|| { + let guard_b = thread::spawn(move|| { let (tx, rx) = (btx, arx); for _ in 0..n { rx.recv().unwrap(); @@ -63,19 +63,13 @@ fn ping_pong_bench(n: uint, m: uint) { fn main() { - - let args = os::args(); - let args = args; - let n = if args.len() == 3 { - args[1].parse::<uint>().unwrap() - } else { - 10000 - }; - - let m = if args.len() == 3 { - args[2].parse::<uint>().unwrap() + let mut args = env::args(); + let (n, m) = if args.len() == 3 { + let n = args.nth(1).unwrap().parse::<usize>().unwrap(); + let m = args.next().unwrap().parse::<usize>().unwrap(); + (n, m) } else { - 4 + (10000, 4) }; ping_pong_bench(n, m); diff --git a/src/test/bench/rt-parfib.rs b/src/test/bench/rt-parfib.rs index 13b8a5ca763..d420023cf00 100644 --- a/src/test/bench/rt-parfib.rs +++ b/src/test/bench/rt-parfib.rs @@ -9,20 +9,20 @@ // except according to those terms. use std::sync::mpsc::channel; -use std::os; -use std::thread::Thread; +use std::env; +use std::thread; // A simple implementation of parfib. One subtree is found in a new // task and communicated over a oneshot pipe, the other is found // locally. There is no sequential-mode threshold. -fn parfib(n: uint) -> uint { +fn parfib(n: u64) -> u64 { if n == 0 || n == 1 { return 1; } let (tx, rx) = channel(); - Thread::spawn(move|| { + thread::spawn(move|| { tx.send(parfib(n-1)).unwrap(); }); let m2 = parfib(n-2); @@ -30,11 +30,9 @@ fn parfib(n: uint) -> uint { } fn main() { - - let args = os::args(); - let args = args; + let mut args = env::args(); let n = if args.len() == 2 { - args[1].parse::<uint>().unwrap() + args.nth(1).unwrap().parse::<u64>().unwrap() } else { 10 }; diff --git a/src/test/bench/shootout-ackermann.rs b/src/test/bench/shootout-ackermann.rs index 933c1c218c3..d07aa8850aa 100644 --- a/src/test/bench/shootout-ackermann.rs +++ b/src/test/bench/shootout-ackermann.rs @@ -8,10 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::os; use std::env; -fn ack(m: int, n: int) -> int { +fn ack(m: i64, n: i64) -> i64 { if m == 0 { return n + 1 } else { @@ -24,13 +23,13 @@ fn ack(m: int, n: int) -> int { } fn main() { - let args = os::args(); + let mut args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "12".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "8".to_string()) } else { - args.into_iter().collect() + args.collect() }; let n = args[1].parse().unwrap(); println!("Ack(3,{}): {}\n", n, ack(3, n)); diff --git a/src/test/bench/shootout-binarytrees.rs b/src/test/bench/shootout-binarytrees.rs index 0311a1ac7c4..1e23da3020f 100644 --- a/src/test/bench/shootout-binarytrees.rs +++ b/src/test/bench/shootout-binarytrees.rs @@ -41,7 +41,7 @@ extern crate arena; use std::iter::range_step; -use std::thread::{Thread, JoinGuard}; +use std::thread; use arena::TypedArena; struct Tree<'a> { @@ -84,14 +84,13 @@ fn inner(depth: i32, iterations: i32) -> String { } fn main() { - let args = std::os::args(); - let args = args; + let mut args = std::env::args(); let n = if std::env::var_os("RUST_BENCH").is_some() { 17 - } else if args.len() <= 1u { + } else if args.len() <= 1 { 8 } else { - args[1].parse().unwrap() + args.nth(1).unwrap().parse().unwrap() }; let min_depth = 4; let max_depth = if min_depth + 2 > n {min_depth + 2} else {n}; @@ -111,11 +110,11 @@ fn main() { let messages = range_step(min_depth, max_depth + 1, 2).map(|depth| { use std::num::Int; let iterations = 2.pow((max_depth - depth + min_depth) as usize); - Thread::scoped(move || inner(depth, iterations)) + thread::scoped(move || inner(depth, iterations)) }).collect::<Vec<_>>(); for message in messages { - println!("{}", message.join().ok().unwrap()); + println!("{}", message.join()); } println!("long lived tree of depth {}\t check: {}", diff --git a/src/test/bench/shootout-chameneos-redux.rs b/src/test/bench/shootout-chameneos-redux.rs index 628206986c5..5bd1e91ae14 100644 --- a/src/test/bench/shootout-chameneos-redux.rs +++ b/src/test/bench/shootout-chameneos-redux.rs @@ -43,7 +43,7 @@ use self::Color::{Red, Yellow, Blue}; use std::sync::mpsc::{channel, Sender, Receiver}; use std::fmt; -use std::thread::Thread; +use std::thread; fn print_complements() { let all = [Blue, Red, Yellow]; @@ -187,7 +187,7 @@ fn rendezvous(nn: uint, set: Vec<Color>) { let to_rendezvous = to_rendezvous.clone(); let to_rendezvous_log = to_rendezvous_log.clone(); let (to_creature, from_rendezvous) = channel(); - Thread::spawn(move|| { + thread::spawn(move|| { creature(ii, col, from_rendezvous, @@ -230,10 +230,10 @@ fn main() { let nn = if std::env::var_os("RUST_BENCH").is_some() { 200000 } else { - std::os::args() - .get(1) + std::env::args() + .nth(1) .and_then(|arg| arg.parse().ok()) - .unwrap_or(600u) + .unwrap_or(600us) }; print_complements(); diff --git a/src/test/bench/shootout-fannkuch-redux.rs b/src/test/bench/shootout-fannkuch-redux.rs index 92e1bc1a922..f7de935d08f 100644 --- a/src/test/bench/shootout-fannkuch-redux.rs +++ b/src/test/bench/shootout-fannkuch-redux.rs @@ -39,7 +39,7 @@ // OF THE POSSIBILITY OF SUCH DAMAGE. use std::{cmp, iter, mem}; -use std::thread::Thread; +use std::thread; fn rotate(x: &mut [i32]) { let mut prev = x[0]; @@ -164,7 +164,7 @@ fn fannkuch(n: i32) -> (i32, i32) { for (_, j) in (0..N).zip(iter::count(0, k)) { let max = cmp::min(j+k, perm.max()); - futures.push(Thread::scoped(move|| { + futures.push(thread::scoped(move|| { work(perm, j as uint, max as uint) })) } @@ -172,7 +172,7 @@ fn fannkuch(n: i32) -> (i32, i32) { let mut checksum = 0; let mut maxflips = 0; for fut in futures { - let (cs, mf) = fut.join().ok().unwrap(); + let (cs, mf) = fut.join(); checksum += cs; maxflips = cmp::max(maxflips, mf); } @@ -180,8 +180,8 @@ fn fannkuch(n: i32) -> (i32, i32) { } fn main() { - let n = std::os::args() - .get(1) + let n = std::env::args() + .nth(1) .and_then(|arg| arg.parse().ok()) .unwrap_or(2i32); diff --git a/src/test/bench/shootout-fasta-redux.rs b/src/test/bench/shootout-fasta-redux.rs index d91031b8401..277c3ee73df 100644 --- a/src/test/bench/shootout-fasta-redux.rs +++ b/src/test/bench/shootout-fasta-redux.rs @@ -41,11 +41,11 @@ use std::cmp::min; use std::old_io::{stdout, IoResult}; use std::iter::repeat; -use std::os; +use std::env; use std::slice::bytes::copy_memory; -const LINE_LEN: uint = 60; -const LOOKUP_SIZE: uint = 4 * 1024; +const LINE_LEN: usize = 60; +const LOOKUP_SIZE: usize = 4 * 1024; const LOOKUP_SCALE: f32 = (LOOKUP_SIZE - 1) as f32; // Random number generator constants @@ -119,7 +119,7 @@ impl<'a, W: Writer> RepeatFasta<'a, W> { RepeatFasta { alu: alu, out: w } } - fn make(&mut self, n: uint) -> IoResult<()> { + fn make(&mut self, n: usize) -> IoResult<()> { let alu_len = self.alu.len(); let mut buf = repeat(0u8).take(alu_len + LINE_LEN).collect::<Vec<_>>(); let alu: &[u8] = self.alu.as_bytes(); @@ -188,19 +188,19 @@ impl<'a, W: Writer> RandomFasta<'a, W> { 0 } - fn make(&mut self, n: uint) -> IoResult<()> { + fn make(&mut self, n: usize) -> IoResult<()> { let lines = n / LINE_LEN; let chars_left = n % LINE_LEN; let mut buf = [0;LINE_LEN + 1]; for _ in 0..lines { - for i in 0u..LINE_LEN { + for i in 0..LINE_LEN { buf[i] = self.nextc(); } buf[LINE_LEN] = '\n' as u8; try!(self.out.write(&buf)); } - for i in 0u..chars_left { + for i in 0..chars_left { buf[i] = self.nextc(); } self.out.write(&buf[..chars_left]) @@ -208,10 +208,9 @@ impl<'a, W: Writer> RandomFasta<'a, W> { } fn main() { - let args = os::args(); - let args = args; + let mut args = env::args(); let n = if args.len() > 1 { - args[1].parse::<uint>().unwrap() + args.nth(1).unwrap().parse::<usize>().unwrap() } else { 5 }; diff --git a/src/test/bench/shootout-fasta.rs b/src/test/bench/shootout-fasta.rs index 5bf0862e0a1..fd559608011 100644 --- a/src/test/bench/shootout-fasta.rs +++ b/src/test/bench/shootout-fasta.rs @@ -42,10 +42,9 @@ use std::cmp::min; use std::old_io::{BufferedWriter, File}; use std::old_io; use std::num::Float; -use std::os; use std::env; -const LINE_LENGTH: uint = 60; +const LINE_LENGTH: usize = 60; const IM: u32 = 139968; struct MyRandom { @@ -86,7 +85,7 @@ impl<'a> Iterator for AAGen<'a> { } fn make_fasta<W: Writer, I: Iterator<Item=u8>>( - wr: &mut W, header: &str, mut it: I, mut n: uint) + wr: &mut W, header: &str, mut it: I, mut n: usize) -> std::old_io::IoResult<()> { try!(wr.write(header.as_bytes())); @@ -104,14 +103,13 @@ fn make_fasta<W: Writer, I: Iterator<Item=u8>>( } fn run<W: Writer>(writer: &mut W) -> std::old_io::IoResult<()> { - let args = os::args(); - let args = args; + let mut args = env::args(); let n = if env::var_os("RUST_BENCH").is_some() { 25000000 - } else if args.len() <= 1u { + } else if args.len() <= 1 { 1000 } else { - args[1].parse().unwrap() + args.nth(1).unwrap().parse().unwrap() }; let rng = &mut MyRandom::new(); diff --git a/src/test/bench/shootout-fibo.rs b/src/test/bench/shootout-fibo.rs index 6a062ba3980..6f9c775609a 100644 --- a/src/test/bench/shootout-fibo.rs +++ b/src/test/bench/shootout-fibo.rs @@ -8,10 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::os; use std::env; -fn fib(n: int) -> int { +fn fib(n: i64) -> i64 { if n < 2 { return 1; } else { @@ -20,13 +19,13 @@ fn fib(n: int) -> int { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "40".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "30".to_string()) } else { - args.into_iter().collect() + args.collect() }; let n = args[1].parse().unwrap(); println!("{}\n", fib(n)); diff --git a/src/test/bench/shootout-k-nucleotide-pipes.rs b/src/test/bench/shootout-k-nucleotide-pipes.rs index 3c96878179f..4d6ef3d533e 100644 --- a/src/test/bench/shootout-k-nucleotide-pipes.rs +++ b/src/test/bench/shootout-k-nucleotide-pipes.rs @@ -24,7 +24,7 @@ use std::option; use std::os; use std::env; use std::sync::mpsc::{channel, Sender, Receiver}; -use std::thread::Thread; +use std::thread; fn f64_cmp(x: f64, y: f64) -> Ordering { // arbitrarily decide that NaNs are larger than everything. @@ -172,7 +172,7 @@ fn main() { let (to_child, from_parent) = channel(); - Thread::spawn(move|| { + thread::spawn(move|| { make_sequence_processor(sz, &from_parent, &to_parent_); }); diff --git a/src/test/bench/shootout-k-nucleotide.rs b/src/test/bench/shootout-k-nucleotide.rs index ca920b2fa82..b5c460737b8 100644 --- a/src/test/bench/shootout-k-nucleotide.rs +++ b/src/test/bench/shootout-k-nucleotide.rs @@ -45,7 +45,7 @@ use std::ascii::OwnedAsciiExt; use std::slice; use std::sync::Arc; -use std::thread::Thread; +use std::thread; static TABLE: [u8;4] = [ 'A' as u8, 'C' as u8, 'G' as u8, 'T' as u8 ]; static TABLE_SIZE: uint = 2 << 16; @@ -303,17 +303,17 @@ fn main() { let nb_freqs: Vec<_> = (1u..3).map(|i| { let input = input.clone(); - (i, Thread::scoped(move|| generate_frequencies(&input, i))) + (i, thread::scoped(move|| generate_frequencies(&input, i))) }).collect(); let occ_freqs: Vec<_> = OCCURRENCES.iter().map(|&occ| { let input = input.clone(); - Thread::scoped(move|| generate_frequencies(&input, occ.len())) + thread::scoped(move|| generate_frequencies(&input, occ.len())) }).collect(); for (i, freq) in nb_freqs { - print_frequencies(&freq.join().ok().unwrap(), i); + print_frequencies(&freq.join(), i); } for (&occ, freq) in OCCURRENCES.iter().zip(occ_freqs.into_iter()) { - print_occurrences(&mut freq.join().ok().unwrap(), occ); + print_occurrences(&mut freq.join(), occ); } } diff --git a/src/test/bench/shootout-mandelbrot.rs b/src/test/bench/shootout-mandelbrot.rs index e2d51fbf411..bddf6153228 100644 --- a/src/test/bench/shootout-mandelbrot.rs +++ b/src/test/bench/shootout-mandelbrot.rs @@ -43,10 +43,10 @@ // ignore-pretty very bad with line comments use std::old_io; -use std::os; +use std::env; use std::simd::f64x2; use std::sync::Arc; -use std::thread::Thread; +use std::thread; const ITER: usize = 50; const LIMIT: f64 = 2.0; @@ -81,7 +81,7 @@ fn mandelbrot<W: old_io::Writer>(w: usize, mut out: W) -> old_io::IoResult<()> { let mut precalc_i = Vec::with_capacity(h); let precalc_futures = (0..WORKERS).map(|i| { - Thread::scoped(move|| { + thread::scoped(move|| { let mut rs = Vec::with_capacity(w / WORKERS); let mut is = Vec::with_capacity(w / WORKERS); @@ -107,7 +107,7 @@ fn mandelbrot<W: old_io::Writer>(w: usize, mut out: W) -> old_io::IoResult<()> { }).collect::<Vec<_>>(); for res in precalc_futures { - let (rs, is) = res.join().ok().unwrap(); + let (rs, is) = res.join(); precalc_r.extend(rs.into_iter()); precalc_i.extend(is.into_iter()); } @@ -122,7 +122,7 @@ fn mandelbrot<W: old_io::Writer>(w: usize, mut out: W) -> old_io::IoResult<()> { let vec_init_r = arc_init_r.clone(); let vec_init_i = arc_init_i.clone(); - Thread::scoped(move|| { + thread::scoped(move|| { let mut res: Vec<u8> = Vec::with_capacity((chunk_size * w) / 8); let init_r_slice = vec_init_r; @@ -143,7 +143,7 @@ fn mandelbrot<W: old_io::Writer>(w: usize, mut out: W) -> old_io::IoResult<()> { try!(writeln!(&mut out as &mut Writer, "P4\n{} {}", w, h)); for res in data { - try!(out.write(&res.join().ok().unwrap())); + try!(out.write(&res.join())); } out.flush() } @@ -197,13 +197,13 @@ fn write_line(init_i: f64, vec_init_r: &[f64], res: &mut Vec<u8>) { } fn main() { - let args = os::args(); + let mut args = env::args(); let res = if args.len() < 2 { println!("Test mode: do not dump the image because it's not utf8, \ which interferes with the test runner."); mandelbrot(1000, old_io::util::NullWriter) } else { - mandelbrot(args[1].parse().unwrap(), old_io::stdout()) + mandelbrot(args.nth(1).unwrap().parse().unwrap(), old_io::stdout()) }; res.unwrap(); } diff --git a/src/test/bench/shootout-meteor.rs b/src/test/bench/shootout-meteor.rs index d061403d590..a9c4bb99a0e 100644 --- a/src/test/bench/shootout-meteor.rs +++ b/src/test/bench/shootout-meteor.rs @@ -43,7 +43,7 @@ use std::iter::repeat; use std::sync::Arc; use std::sync::mpsc::channel; -use std::thread::Thread; +use std::thread; // // Utilities. @@ -317,7 +317,7 @@ fn par_search(masks: Vec<Vec<Vec<u64>>>) -> Data { let masks = masks.clone(); let tx = tx.clone(); let m = *m; - Thread::spawn(move|| { + thread::spawn(move|| { let mut data = Data::new(); search(&*masks, m, 1, List::Cons(m, &List::Nil), &mut data); tx.send(data).unwrap(); diff --git a/src/test/bench/shootout-nbody.rs b/src/test/bench/shootout-nbody.rs index 7904657bece..534dfe9548c 100644 --- a/src/test/bench/shootout-nbody.rs +++ b/src/test/bench/shootout-nbody.rs @@ -173,7 +173,7 @@ fn main() { let n = if std::env::var_os("RUST_BENCH").is_some() { 5000000 } else { - std::os::args().get(1) + std::env::args().nth(1) .and_then(|arg| arg.parse().ok()) .unwrap_or(1000) }; diff --git a/src/test/bench/shootout-pfib.rs b/src/test/bench/shootout-pfib.rs index 9abc808f887..a542c81f239 100644 --- a/src/test/bench/shootout-pfib.rs +++ b/src/test/bench/shootout-pfib.rs @@ -21,14 +21,13 @@ extern crate getopts; use std::sync::mpsc::{channel, Sender}; -use std::os; use std::env; use std::result::Result::{Ok, Err}; -use std::thread::Thread; +use std::thread; use std::time::Duration; -fn fib(n: int) -> int { - fn pfib(tx: &Sender<int>, n: int) { +fn fib(n: isize) -> isize { + fn pfib(tx: &Sender<isize>, n: isize) { if n == 0 { tx.send(0).unwrap(); } else if n <= 2 { @@ -36,15 +35,15 @@ fn fib(n: int) -> int { } else { let (tx1, rx) = channel(); let tx2 = tx1.clone(); - Thread::spawn(move|| pfib(&tx2, n - 1)); + thread::spawn(move|| pfib(&tx2, n - 1)); let tx2 = tx1.clone(); - Thread::spawn(move|| pfib(&tx2, n - 2)); + thread::spawn(move|| pfib(&tx2, n - 2)); tx.send(rx.recv().unwrap() + rx.recv().unwrap()); } } let (tx, rx) = channel(); - Thread::spawn(move|| pfib(&tx, n) ); + thread::spawn(move|| pfib(&tx, n) ); rx.recv().unwrap() } @@ -66,7 +65,7 @@ fn parse_opts(argv: Vec<String> ) -> Config { } } -fn stress_task(id: int) { +fn stress_task(id: isize) { let mut i = 0; loop { let n = 15; @@ -79,7 +78,7 @@ fn stress_task(id: int) { fn stress(num_tasks: int) { let mut results = Vec::new(); for i in 0..num_tasks { - results.push(Thread::scoped(move|| { + results.push(thread::spawn(move|| { stress_task(i); })); } @@ -89,13 +88,13 @@ fn stress(num_tasks: int) { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "20".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "8".to_string()) } else { - args.into_iter().map(|x| x.to_string()).collect() + args.map(|x| x.to_string()).collect() }; let opts = parse_opts(args.clone()); @@ -103,12 +102,12 @@ fn main() { if opts.stress { stress(2); } else { - let max = args[1].parse::<int>().unwrap(); + let max = args[1].parse::<isize>().unwrap(); let num_trials = 10; for n in 1..max + 1 { - for _ in 0u..num_trials { + for _ in 0..num_trials { let mut fibn = None; let dur = Duration::span(|| fibn = Some(fib(n))); let fibn = fibn.unwrap(); diff --git a/src/test/bench/shootout-reverse-complement.rs b/src/test/bench/shootout-reverse-complement.rs index 94438319954..33d959dfe93 100644 --- a/src/test/bench/shootout-reverse-complement.rs +++ b/src/test/bench/shootout-reverse-complement.rs @@ -47,7 +47,7 @@ extern crate libc; use std::old_io::stdio::{stdin_raw, stdout_raw}; use std::old_io::{IoResult, EndOfFile}; use std::ptr::{copy_memory, Unique}; -use std::thread::Thread; +use std::thread; struct Tables { table8: [u8;1 << 8], @@ -229,21 +229,12 @@ unsafe impl<T: 'static> Send for Racy<T> {} /// Executes a closure in parallel over the given iterator over mutable slice. /// The closure `f` is run in parallel with an element of `iter`. -fn parallel<'a, I, T, F>(iter: I, f: F) - where T: 'a+Send + Sync, - I: Iterator<Item=&'a mut [T]>, - F: Fn(&mut [T]) + Sync { - use std::mem; - use std::raw::Repr; - - iter.map(|chunk| { - // Need to convert `f` and `chunk` to something that can cross the task - // boundary. - let f = Racy(&f as *const F as *const uint); - let raw = Racy(chunk.repr()); - Thread::scoped(move|| { - let f = f.0 as *const F; - unsafe { (*f)(mem::transmute(raw.0)) } +fn parallel<'a, I: Iterator, F>(iter: I, ref f: F) + where I::Item: Send + 'a, + F: Fn(I::Item) + Sync + 'a { + iter.map(|x| { + thread::scoped(move|| { + f(x) }) }).collect::<Vec<_>>(); } diff --git a/src/test/bench/shootout-spectralnorm.rs b/src/test/bench/shootout-spectralnorm.rs index 8356df8d8a1..76ba5acb16c 100644 --- a/src/test/bench/shootout-spectralnorm.rs +++ b/src/test/bench/shootout-spectralnorm.rs @@ -44,7 +44,7 @@ #![feature(unboxed_closures)] use std::iter::{repeat, AdditiveIterator}; -use std::thread::Thread; +use std::thread; use std::mem; use std::num::Float; use std::os; @@ -53,13 +53,13 @@ use std::raw::Repr; use std::simd::f64x2; fn main() { - let args = os::args(); + let mut args = env::args(); let answer = spectralnorm(if env::var_os("RUST_BENCH").is_some() { 5500 } else if args.len() < 2 { 2000 } else { - args[1].parse().unwrap() + args.nth(1).unwrap().parse().unwrap() }); println!("{:.9}", answer); } @@ -112,26 +112,16 @@ fn dot(v: &[f64], u: &[f64]) -> f64 { } -struct Racy<T>(T); - -unsafe impl<T: 'static> Send for Racy<T> {} - // Executes a closure in parallel over the given mutable slice. The closure `f` // is run in parallel and yielded the starting index within `v` as well as a // sub-slice of `v`. -fn parallel<T, F>(v: &mut [T], f: F) - where T: Send + Sync, - F: Fn(uint, &mut [T]) + Sync { +fn parallel<'a,T, F>(v: &mut [T], ref f: F) + where T: Send + Sync + 'a, + F: Fn(uint, &mut [T]) + Sync + 'a { let size = v.len() / os::num_cpus() + 1; - v.chunks_mut(size).enumerate().map(|(i, chunk)| { - // Need to convert `f` and `chunk` to something that can cross the task - // boundary. - let f = Racy(&f as *const _ as *const uint); - let raw = Racy(chunk.repr()); - Thread::scoped(move|| { - let f = f.0 as *const F; - unsafe { (*f)(i * size, mem::transmute(raw.0)) } + thread::scoped(move|| { + f(i * size, chunk) }) }).collect::<Vec<_>>(); } diff --git a/src/test/bench/shootout-threadring.rs b/src/test/bench/shootout-threadring.rs index 8614f94da89..2653e758a48 100644 --- a/src/test/bench/shootout-threadring.rs +++ b/src/test/bench/shootout-threadring.rs @@ -39,7 +39,7 @@ // OF THE POSSIBILITY OF SUCH DAMAGE. use std::sync::mpsc::{channel, Sender, Receiver}; -use std::thread::Thread; +use std::thread; fn start(n_tasks: i32, token: i32) { let (tx, mut rx) = channel(); @@ -48,9 +48,9 @@ fn start(n_tasks: i32, token: i32) { for i in 2 .. n_tasks + 1 { let (tx, next_rx) = channel(); let cur_rx = std::mem::replace(&mut rx, next_rx); - guards.push(Thread::scoped(move|| roundtrip(i, tx, cur_rx))); + guards.push(thread::spawn(move|| roundtrip(i, tx, cur_rx))); } - let guard = Thread::scoped(move|| roundtrip(1, tx, rx)); + let guard = thread::spawn(move|| roundtrip(1, tx, rx)); } fn roundtrip(id: i32, tx: Sender<i32>, rx: Receiver<i32>) { @@ -64,13 +64,13 @@ fn roundtrip(id: i32, tx: Sender<i32>, rx: Receiver<i32>) { } fn main() { - let args = std::os::args(); + let mut args = std::env::args(); let token = if std::env::var_os("RUST_BENCH").is_some() { 2000000 } else { - args.get(1).and_then(|arg| arg.parse().ok()).unwrap_or(1000) + args.nth(1).and_then(|arg| arg.parse().ok()).unwrap_or(1000) }; - let n_tasks = args.get(2) + let n_tasks = args.next() .and_then(|arg| arg.parse().ok()) .unwrap_or(503); diff --git a/src/test/bench/std-smallintmap.rs b/src/test/bench/std-smallintmap.rs index e6948a1371c..a54a869412e 100644 --- a/src/test/bench/std-smallintmap.rs +++ b/src/test/bench/std-smallintmap.rs @@ -11,41 +11,40 @@ // Microbenchmark for the smallintmap library use std::collections::VecMap; -use std::os; use std::env; use std::time::Duration; -fn append_sequential(min: uint, max: uint, map: &mut VecMap<uint>) { +fn append_sequential(min: usize, max: usize, map: &mut VecMap<usize>) { for i in min..max { - map.insert(i, i + 22u); + map.insert(i, i + 22); } } -fn check_sequential(min: uint, max: uint, map: &VecMap<uint>) { +fn check_sequential(min: usize, max: usize, map: &VecMap<usize>) { for i in min..max { - assert_eq!(map[i], i + 22u); + assert_eq!(map[i], i + 22); } } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "100000".to_string(), "100".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "10000".to_string(), "50".to_string()) } else { - args.into_iter().collect() + args.collect() }; - let max = args[1].parse::<uint>().unwrap(); - let rep = args[2].parse::<uint>().unwrap(); + let max = args[1].parse::<usize>().unwrap(); + let rep = args[2].parse::<usize>().unwrap(); let mut checkf = Duration::seconds(0); let mut appendf = Duration::seconds(0); - for _ in 0u..rep { + for _ in 0..rep { let mut map = VecMap::new(); - let d1 = Duration::span(|| append_sequential(0u, max, &mut map)); - let d2 = Duration::span(|| check_sequential(0u, max, &map)); + let d1 = Duration::span(|| append_sequential(0, max, &mut map)); + let d2 = Duration::span(|| check_sequential(0, max, &map)); checkf = checkf + d2; appendf = appendf + d1; diff --git a/src/test/bench/sudoku.rs b/src/test/bench/sudoku.rs index c5a64db95e6..ada8efcbf38 100644 --- a/src/test/bench/sudoku.rs +++ b/src/test/bench/sudoku.rs @@ -18,7 +18,7 @@ use std::old_io::stdio::StdReader; use std::old_io; use std::iter::repeat; use std::num::Int; -use std::os; +use std::env; // Computes a single solution to a given 9x9 sudoku // @@ -269,8 +269,8 @@ fn check_DEFAULT_SUDOKU_solution() { } fn main() { - let args = os::args(); - let use_default = args.len() == 1u; + let args = env::args(); + let use_default = args.len() == 1; let mut sudoku = if use_default { Sudoku::from_vec(&DEFAULT_SUDOKU) } else { diff --git a/src/test/bench/task-perf-alloc-unwind.rs b/src/test/bench/task-perf-alloc-unwind.rs index c45efe5f54b..6b412c47cd7 100644 --- a/src/test/bench/task-perf-alloc-unwind.rs +++ b/src/test/bench/task-perf-alloc-unwind.rs @@ -11,7 +11,7 @@ #![feature(unsafe_destructor, box_syntax)] use std::env; -use std::thread::Thread; +use std::thread; use std::time::Duration; #[derive(Clone)] @@ -32,7 +32,7 @@ fn main() { fn run(repeat: int, depth: int) { for _ in 0..repeat { let dur = Duration::span(|| { - let _ = Thread::scoped(move|| { + let _ = thread::spawn(move|| { recurse_or_panic(depth, None) }).join(); }); diff --git a/src/test/bench/task-perf-jargon-metal-smoke.rs b/src/test/bench/task-perf-jargon-metal-smoke.rs index 9edb4201098..e36d685d7c6 100644 --- a/src/test/bench/task-perf-jargon-metal-smoke.rs +++ b/src/test/bench/task-perf-jargon-metal-smoke.rs @@ -18,17 +18,16 @@ // ignore-pretty very bad with line comments use std::sync::mpsc::{channel, Sender}; -use std::os; use std::env; -use std::thread::Thread; +use std::thread; fn child_generation(gens_left: uint, tx: Sender<()>) { // This used to be O(n^2) in the number of generations that ever existed. // With this code, only as many generations are alive at a time as tasks // alive at a time, - Thread::spawn(move|| { + thread::spawn(move|| { if gens_left & 1 == 1 { - Thread::yield_now(); // shake things up a bit + thread::yield_now(); // shake things up a bit } if gens_left > 0 { child_generation(gens_left - 1, tx); // recurse @@ -39,13 +38,13 @@ fn child_generation(gens_left: uint, tx: Sender<()>) { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "100000".to_string()) } else if args.len() <= 1 { vec!("".to_string(), "100".to_string()) } else { - args.clone().into_iter().collect() + args.collect() }; let (tx, rx) = channel(); diff --git a/src/test/bench/task-perf-spawnalot.rs b/src/test/bench/task-perf-spawnalot.rs index 279b3fa432a..69b9e89dbc5 100644 --- a/src/test/bench/task-perf-spawnalot.rs +++ b/src/test/bench/task-perf-spawnalot.rs @@ -8,14 +8,13 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::os; use std::env; -use std::thread::Thread; +use std::thread; -fn f(n: uint) { +fn f(n: usize) { let mut i = 0u; while i < n { - let _ = Thread::scoped(move|| g()).join(); + let _ = thread::spawn(move|| g()).join(); i += 1u; } } @@ -23,15 +22,15 @@ fn f(n: uint) { fn g() { } fn main() { - let args = os::args(); + let args = env::args(); let args = if env::var_os("RUST_BENCH").is_some() { vec!("".to_string(), "400".to_string()) - } else if args.len() <= 1u { + } else if args.len() <= 1 { vec!("".to_string(), "10".to_string()) } else { - args.into_iter().collect() + args.collect() }; let n = args[1].parse().unwrap(); - let mut i = 0u; - while i < n { Thread::spawn(move|| f(n) ); i += 1u; } + let mut i = 0; + while i < n { thread::spawn(move|| f(n) ); i += 1; } } |
