1
Fork 0

Remove Times trait

`Times::times` was always a second-class loop because it did not support the `break` and `continue` operations. Its playful appeal was then lost after `do` was disabled for closures. It's time to let this one go.
This commit is contained in:
Brendan Zabarauskas 2014-01-30 11:20:34 +11:00
parent dfb61166f5
commit 729060dbb9
47 changed files with 151 additions and 200 deletions

View file

@ -78,7 +78,6 @@ syn keyword rustTrait FromStr
syn keyword rustTrait FromIterator Extendable syn keyword rustTrait FromIterator Extendable
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator CloneableIterator syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator CloneableIterator
syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize
syn keyword rustTrait Times
syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic
syn keyword rustTrait Bitwise Bounded Integer Fractional Real RealExt syn keyword rustTrait Bitwise Bounded Integer Fractional Real RealExt

View file

@ -770,19 +770,19 @@ mod tests {
task::spawn(proc() { task::spawn(proc() {
arc2.write(|num| { arc2.write(|num| {
10.times(|| { for _ in range(0, 10) {
let tmp = *num; let tmp = *num;
*num = -1; *num = -1;
task::deschedule(); task::deschedule();
*num = tmp + 1; *num = tmp + 1;
}); }
c.send(()); c.send(());
}) })
}); });
// Readers try to catch the writer in the act // Readers try to catch the writer in the act
let mut children = ~[]; let mut children = ~[];
5.times(|| { for _ in range(0, 5) {
let arc3 = arc.clone(); let arc3 = arc.clone();
let mut builder = task::task(); let mut builder = task::task();
children.push(builder.future_result()); children.push(builder.future_result());
@ -791,7 +791,7 @@ mod tests {
assert!(*num >= 0); assert!(*num >= 0);
}) })
}); });
}); }
// Wait for children to pass their asserts // Wait for children to pass their asserts
for r in children.mut_iter() { for r in children.mut_iter() {
@ -836,7 +836,7 @@ mod tests {
// Reader tasks // Reader tasks
let mut reader_convos = ~[]; let mut reader_convos = ~[];
10.times(|| { for _ in range(0, 10) {
let ((rp1, rc1), (rp2, rc2)) = (Chan::new(), Chan::new()); let ((rp1, rc1), (rp2, rc2)) = (Chan::new(), Chan::new());
reader_convos.push((rc1, rp2)); reader_convos.push((rc1, rp2));
let arcn = arc.clone(); let arcn = arc.clone();
@ -847,7 +847,7 @@ mod tests {
rc2.send(()); rc2.send(());
}) })
}); });
}); }
// Writer task // Writer task
let arc2 = arc.clone(); let arc2 = arc.clone();
@ -944,7 +944,7 @@ mod tests {
read_mode.read(|state| { read_mode.read(|state| {
// if writer mistakenly got in, make sure it mutates state // if writer mistakenly got in, make sure it mutates state
// before we assert on it // before we assert on it
5.times(|| task::deschedule()); for _ in range(0, 5) { task::deschedule(); }
// make sure writer didn't get in. // make sure writer didn't get in.
assert!(*state); assert!(*state);
}) })
@ -956,6 +956,6 @@ mod tests {
// helped to expose the race nearly 100% of the time... but adding // helped to expose the race nearly 100% of the time... but adding
// deschedules in the intuitively-right locations made it even less likely, // deschedules in the intuitively-right locations made it even less likely,
// and I wasn't sure why :( . This is a mediocre "next best" option. // and I wasn't sure why :( . This is a mediocre "next best" option.
8.times(|| test_rw_write_cond_downgrade_read_race_helper()); for _ in range(0, 8) { test_rw_write_cond_downgrade_read_race_helper(); }
} }
} }

View file

@ -336,11 +336,11 @@ mod test {
use std::rand::{task_rng, random, Rng}; use std::rand::{task_rng, random, Rng};
use std::vec; use std::vec;
1000.times(|| { for _ in range(0, 1000) {
let times = task_rng().gen_range(1u, 100); let times = task_rng().gen_range(1u, 100);
let v = vec::from_fn(times, |_| random::<u8>()); let v = vec::from_fn(times, |_| random::<u8>());
assert_eq!(v.to_base64(STANDARD).from_base64().unwrap(), v); assert_eq!(v.to_base64(STANDARD).from_base64().unwrap(), v);
}) }
} }
#[bench] #[bench]

View file

@ -127,9 +127,9 @@ mod test {
// Rendezvous streams should be able to handle any number of messages being sent // Rendezvous streams should be able to handle any number of messages being sent
let (port, chan) = rendezvous(); let (port, chan) = rendezvous();
spawn(proc() { spawn(proc() {
10000.times(|| { chan.send(()) }) for _ in range(0, 10000) { chan.send(()); }
}); });
10000.times(|| { port.recv() }) for _ in range(0, 10000) { port.recv(); }
} }
#[test] #[test]

View file

@ -1036,11 +1036,11 @@ mod tests {
#[test] #[test]
fn test_fuzz() { fn test_fuzz() {
25.times(|| { for _ in range(0, 25) {
fuzz_test(3); fuzz_test(3);
fuzz_test(16); fuzz_test(16);
fuzz_test(189); fuzz_test(189);
}) }
} }
#[cfg(test)] #[cfg(test)]

View file

@ -726,9 +726,9 @@ pub mod groups {
// here we just need to indent the start of the description // here we just need to indent the start of the description
let rowlen = row.char_len(); let rowlen = row.char_len();
if rowlen < 24 { if rowlen < 24 {
(24 - rowlen).times(|| { for _ in range(0, 24 - rowlen) {
row.push_char(' ') row.push_char(' ');
}) }
} else { } else {
row.push_str(desc_sep) row.push_str(desc_sep)
} }

View file

@ -282,7 +282,7 @@ fn escape_str(s: &str) -> ~str {
fn spaces(n: uint) -> ~str { fn spaces(n: uint) -> ~str {
let mut ss = ~""; let mut ss = ~"";
n.times(|| ss.push_str(" ")); for _ in range(0, n) { ss.push_str(" "); }
return ss; return ss;
} }

View file

@ -2052,22 +2052,22 @@ mod biguint_tests {
fn test_rand_range() { fn test_rand_range() {
let mut rng = task_rng(); let mut rng = task_rng();
10.times(|| { for _ in range(0, 10) {
assert_eq!(rng.gen_bigint_range(&FromPrimitive::from_uint(236).unwrap(), assert_eq!(rng.gen_bigint_range(&FromPrimitive::from_uint(236).unwrap(),
&FromPrimitive::from_uint(237).unwrap()), &FromPrimitive::from_uint(237).unwrap()),
FromPrimitive::from_uint(236).unwrap()); FromPrimitive::from_uint(236).unwrap());
}); }
let l = FromPrimitive::from_uint(403469000 + 2352).unwrap(); let l = FromPrimitive::from_uint(403469000 + 2352).unwrap();
let u = FromPrimitive::from_uint(403469000 + 3513).unwrap(); let u = FromPrimitive::from_uint(403469000 + 3513).unwrap();
1000.times(|| { for _ in range(0, 1000) {
let n: BigUint = rng.gen_biguint_below(&u); let n: BigUint = rng.gen_biguint_below(&u);
assert!(n < u); assert!(n < u);
let n: BigUint = rng.gen_biguint_range(&l, &u); let n: BigUint = rng.gen_biguint_range(&l, &u);
assert!(n >= l); assert!(n >= l);
assert!(n < u); assert!(n < u);
}) }
} }
#[test] #[test]
@ -2550,19 +2550,19 @@ mod bigint_tests {
fn test_rand_range() { fn test_rand_range() {
let mut rng = task_rng(); let mut rng = task_rng();
10.times(|| { for _ in range(0, 10) {
assert_eq!(rng.gen_bigint_range(&FromPrimitive::from_uint(236).unwrap(), assert_eq!(rng.gen_bigint_range(&FromPrimitive::from_uint(236).unwrap(),
&FromPrimitive::from_uint(237).unwrap()), &FromPrimitive::from_uint(237).unwrap()),
FromPrimitive::from_uint(236).unwrap()); FromPrimitive::from_uint(236).unwrap());
}); }
fn check(l: BigInt, u: BigInt) { fn check(l: BigInt, u: BigInt) {
let mut rng = task_rng(); let mut rng = task_rng();
1000.times(|| { for _ in range(0, 1000) {
let n: BigInt = rng.gen_bigint_range(&l, &u); let n: BigInt = rng.gen_bigint_range(&l, &u);
assert!(n >= l); assert!(n >= l);
assert!(n < u); assert!(n < u);
}); }
} }
let l: BigInt = FromPrimitive::from_uint(403469000 + 2352).unwrap(); let l: BigInt = FromPrimitive::from_uint(403469000 + 2352).unwrap();
let u: BigInt = FromPrimitive::from_uint(403469000 + 3513).unwrap(); let u: BigInt = FromPrimitive::from_uint(403469000 + 3513).unwrap();

View file

@ -571,9 +571,9 @@ mod tests {
fn bench_grow(b: &mut test::BenchHarness) { fn bench_grow(b: &mut test::BenchHarness) {
let mut deq = RingBuf::new(); let mut deq = RingBuf::new();
b.iter(|| { b.iter(|| {
65.times(|| { for _ in range(0, 65) {
deq.push_front(1); deq.push_front(1);
}) }
}) })
} }

View file

@ -120,7 +120,7 @@ impl<Q:Send> Sem<Q> {
} }
}); });
// Uncomment if you wish to test for sem races. Not valgrind-friendly. // Uncomment if you wish to test for sem races. Not valgrind-friendly.
/* 1000.times(|| task::deschedule()); */ /* for _ in range(0, 1000) { task::deschedule(); } */
// Need to wait outside the exclusive. // Need to wait outside the exclusive.
if waiter_nobe.is_some() { if waiter_nobe.is_some() {
let _ = waiter_nobe.unwrap().recv(); let _ = waiter_nobe.unwrap().recv();
@ -155,7 +155,7 @@ impl Sem<~[WaitQueue]> {
fn new_and_signal(count: int, num_condvars: uint) fn new_and_signal(count: int, num_condvars: uint)
-> Sem<~[WaitQueue]> { -> Sem<~[WaitQueue]> {
let mut queues = ~[]; let mut queues = ~[];
num_condvars.times(|| queues.push(WaitQueue::new())); for _ in range(0, num_condvars) { queues.push(WaitQueue::new()); }
Sem::new(count, queues) Sem::new(count, queues)
} }
} }
@ -691,7 +691,7 @@ impl<'a> RWLockReadMode<'a> {
/// use extra::sync::Barrier; /// use extra::sync::Barrier;
/// ///
/// let barrier = Barrier::new(10); /// let barrier = Barrier::new(10);
/// 10.times(|| { /// for _ in range(0, 10) {
/// let c = barrier.clone(); /// let c = barrier.clone();
/// // The same messages will be printed together. /// // The same messages will be printed together.
/// // You will NOT see any interleaving. /// // You will NOT see any interleaving.
@ -700,7 +700,7 @@ impl<'a> RWLockReadMode<'a> {
/// c.wait(); /// c.wait();
/// println!("after wait"); /// println!("after wait");
/// }); /// });
/// }); /// }
/// ``` /// ```
#[deriving(Clone)] #[deriving(Clone)]
pub struct Barrier { pub struct Barrier {
@ -780,11 +780,11 @@ mod tests {
let s2 = s.clone(); let s2 = s.clone();
task::spawn(proc() { task::spawn(proc() {
s2.access(|| { s2.access(|| {
5.times(|| { task::deschedule(); }) for _ in range(0, 5) { task::deschedule(); }
}) })
}); });
s.access(|| { s.access(|| {
5.times(|| { task::deschedule(); }) for _ in range(0, 5) { task::deschedule(); }
}) })
} }
#[test] #[test]
@ -797,7 +797,7 @@ mod tests {
s2.acquire(); s2.acquire();
c.send(()); c.send(());
}); });
5.times(|| { task::deschedule(); }); for _ in range(0, 5) { task::deschedule(); }
s.release(); s.release();
let _ = p.recv(); let _ = p.recv();
@ -806,7 +806,7 @@ mod tests {
let s = Semaphore::new(0); let s = Semaphore::new(0);
let s2 = s.clone(); let s2 = s.clone();
task::spawn(proc() { task::spawn(proc() {
5.times(|| { task::deschedule(); }); for _ in range(0, 5) { task::deschedule(); }
s2.release(); s2.release();
let _ = p.recv(); let _ = p.recv();
}); });
@ -848,7 +848,7 @@ mod tests {
c.send(()); c.send(());
}); });
let _ = p.recv(); // wait for child to come alive let _ = p.recv(); // wait for child to come alive
5.times(|| { task::deschedule(); }); // let the child contend for _ in range(0, 5) { task::deschedule(); } // let the child contend
}); });
let _ = p.recv(); // wait for child to be done let _ = p.recv(); // wait for child to be done
} }
@ -880,13 +880,13 @@ mod tests {
} }
fn access_shared(sharedstate: &mut int, m: &Mutex, n: uint) { fn access_shared(sharedstate: &mut int, m: &Mutex, n: uint) {
n.times(|| { for _ in range(0, n) {
m.lock(|| { m.lock(|| {
let oldval = *sharedstate; let oldval = *sharedstate;
task::deschedule(); task::deschedule();
*sharedstate = oldval + 1; *sharedstate = oldval + 1;
}) })
}) }
} }
} }
#[test] #[test]
@ -926,7 +926,7 @@ mod tests {
let m = Mutex::new(); let m = Mutex::new();
let mut ports = ~[]; let mut ports = ~[];
num_waiters.times(|| { for _ in range(0, num_waiters) {
let mi = m.clone(); let mi = m.clone();
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
ports.push(port); ports.push(port);
@ -937,7 +937,7 @@ mod tests {
chan.send(()); chan.send(());
}) })
}); });
}); }
// wait until all children get in the mutex // wait until all children get in the mutex
for port in ports.mut_iter() { let _ = port.recv(); } for port in ports.mut_iter() { let _ = port.recv(); }
@ -1020,7 +1020,7 @@ mod tests {
let result: result::Result<(), ~Any> = task::try(proc() { let result: result::Result<(), ~Any> = task::try(proc() {
let mut sibling_convos = ~[]; let mut sibling_convos = ~[];
2.times(|| { for _ in range(0, 2) {
let (p, c) = Chan::new(); let (p, c) = Chan::new();
sibling_convos.push(p); sibling_convos.push(p);
let mi = m2.clone(); let mi = m2.clone();
@ -1037,7 +1037,7 @@ mod tests {
}) })
}) })
}); });
}); }
for p in sibling_convos.mut_iter() { for p in sibling_convos.mut_iter() {
let _ = p.recv(); // wait for sibling to get in the mutex let _ = p.recv(); // wait for sibling to get in the mutex
} }
@ -1156,13 +1156,13 @@ mod tests {
fn access_shared(sharedstate: &mut int, x: &RWLock, mode: RWLockMode, fn access_shared(sharedstate: &mut int, x: &RWLock, mode: RWLockMode,
n: uint) { n: uint) {
n.times(|| { for _ in range(0, n) {
lock_rwlock_in_mode(x, mode, || { lock_rwlock_in_mode(x, mode, || {
let oldval = *sharedstate; let oldval = *sharedstate;
task::deschedule(); task::deschedule();
*sharedstate = oldval + 1; *sharedstate = oldval + 1;
}) })
}) }
} }
} }
#[test] #[test]
@ -1287,7 +1287,7 @@ mod tests {
let x = RWLock::new(); let x = RWLock::new();
let mut ports = ~[]; let mut ports = ~[];
num_waiters.times(|| { for _ in range(0, num_waiters) {
let xi = x.clone(); let xi = x.clone();
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
ports.push(port); ports.push(port);
@ -1298,7 +1298,7 @@ mod tests {
chan.send(()); chan.send(());
}) })
}); });
}); }
// wait until all children get in the mutex // wait until all children get in the mutex
for port in ports.mut_iter() { let _ = port.recv(); } for port in ports.mut_iter() { let _ = port.recv(); }
@ -1388,14 +1388,14 @@ mod tests {
let barrier = Barrier::new(10); let barrier = Barrier::new(10);
let (port, chan) = SharedChan::new(); let (port, chan) = SharedChan::new();
9.times(|| { for _ in range(0, 9) {
let c = barrier.clone(); let c = barrier.clone();
let chan = chan.clone(); let chan = chan.clone();
spawn(proc() { spawn(proc() {
c.wait(); c.wait();
chan.send(true); chan.send(true);
}); });
}); }
// At this point, all spawned tasks should be blocked, // At this point, all spawned tasks should be blocked,
// so we shouldn't get anything from the port // so we shouldn't get anything from the port
@ -1406,8 +1406,8 @@ mod tests {
barrier.wait(); barrier.wait();
// Now, the barrier is cleared and we should get data. // Now, the barrier is cleared and we should get data.
9.times(|| { for _ in range(0, 9) {
port.recv(); port.recv();
}); }
} }
} }

View file

@ -86,7 +86,7 @@ fn test_task_pool() {
g g
}; };
let mut pool = TaskPool::new(4, f); let mut pool = TaskPool::new(4, f);
8.times(|| { for _ in range(0, 8) {
pool.execute(proc(i) println!("Hello from thread {}!", *i)); pool.execute(proc(i) println!("Hello from thread {}!", *i));
}) }
} }

View file

@ -1150,8 +1150,8 @@ mod test_treemap {
let mut rng: rand::IsaacRng = rand::SeedableRng::from_seed(&[42]); let mut rng: rand::IsaacRng = rand::SeedableRng::from_seed(&[42]);
3.times(|| { for _ in range(0, 3) {
90.times(|| { for _ in range(0, 90) {
let k = rng.gen(); let k = rng.gen();
let v = rng.gen(); let v = rng.gen();
if !ctrl.iter().any(|x| x == &(k, v)) { if !ctrl.iter().any(|x| x == &(k, v)) {
@ -1160,16 +1160,16 @@ mod test_treemap {
check_structure(&map); check_structure(&map);
check_equal(ctrl, &map); check_equal(ctrl, &map);
} }
}); }
30.times(|| { for _ in range(0, 30) {
let r = rng.gen_range(0, ctrl.len()); let r = rng.gen_range(0, ctrl.len());
let (key, _) = ctrl.remove(r).unwrap(); let (key, _) = ctrl.remove(r).unwrap();
assert!(map.remove(&key)); assert!(map.remove(&key));
check_structure(&map); check_structure(&map);
check_equal(ctrl, &map); check_equal(ctrl, &map);
}); }
}) }
} }
#[test] #[test]

View file

@ -103,15 +103,15 @@ mod tests {
fn test_flate_round_trip() { fn test_flate_round_trip() {
let mut r = rand::rng(); let mut r = rand::rng();
let mut words = ~[]; let mut words = ~[];
20.times(|| { for _ in range(0, 20) {
let range = r.gen_range(1u, 10); let range = r.gen_range(1u, 10);
words.push(r.gen_vec::<u8>(range)); words.push(r.gen_vec::<u8>(range));
}); }
20.times(|| { for _ in range(0, 20) {
let mut input = ~[]; let mut input = ~[];
2000.times(|| { for _ in range(0, 2000) {
input.push_all(r.choose(words)); input.push_all(r.choose(words));
}); }
debug!("de/inflate of {} bytes of random word-sequences", debug!("de/inflate of {} bytes of random word-sequences",
input.len()); input.len());
let cmp = deflate_bytes(input); let cmp = deflate_bytes(input);
@ -120,7 +120,7 @@ mod tests {
input.len(), cmp.len(), input.len(), cmp.len(),
100.0 * ((cmp.len() as f64) / (input.len() as f64))); 100.0 * ((cmp.len() as f64) / (input.len() as f64)));
assert_eq!(input, out); assert_eq!(input, out);
}); }
} }
#[test] #[test]

View file

@ -1275,13 +1275,13 @@ mod test {
fn multithreading() { fn multithreading() {
run(proc() { run(proc() {
let mut ports = ~[]; let mut ports = ~[];
10.times(|| { for _ in range(0, 10) {
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
spawn(proc() { spawn(proc() {
chan.send(()); chan.send(());
}); });
ports.push(port); ports.push(port);
}); }
loop { loop {
match ports.pop() { match ports.pop() {
@ -1410,7 +1410,7 @@ mod test {
fn single_threaded_yield() { fn single_threaded_yield() {
use std::task::deschedule; use std::task::deschedule;
run(proc() { run(proc() {
5.times(deschedule); for _ in range(0, 5) { deschedule(); }
}); });
} }

View file

@ -534,7 +534,7 @@ mod tests {
fn yield_test() { fn yield_test() {
let (p, c) = Chan::new(); let (p, c) = Chan::new();
spawn_opts(TaskOpts::new(), proc() { spawn_opts(TaskOpts::new(), proc() {
10.times(task::deschedule); for _ in range(0, 10) { task::deschedule(); }
c.send(()); c.send(());
}); });
p.recv(); p.recv();

View file

@ -312,7 +312,7 @@ mod tests {
fn yield_test() { fn yield_test() {
let (p, c) = Chan::new(); let (p, c) = Chan::new();
spawn(proc() { spawn(proc() {
10.times(task::deschedule); for _ in range(0, 10) { task::deschedule(); }
c.send(()); c.send(());
}); });
p.recv(); p.recv();

View file

@ -214,11 +214,11 @@ impl<O:DataFlowOperator> DataFlowContext<O> {
}); });
if expanded { if expanded {
let entry = if self.oper.initial_value() { uint::MAX } else {0}; let entry = if self.oper.initial_value() { uint::MAX } else {0};
self.words_per_id.times(|| { for _ in range(0, self.words_per_id) {
self.gens.push(0); self.gens.push(0);
self.kills.push(0); self.kills.push(0);
self.on_entry.push(entry); self.on_entry.push(entry);
}) }
} }
let start = *n * self.words_per_id; let start = *n * self.words_per_id;
let end = start + self.words_per_id; let end = start + self.words_per_id;

View file

@ -540,10 +540,10 @@ impl<'a> Context<'a> {
// rollback // rollback
self.is_doc_hidden = old_is_doc_hidden; self.is_doc_hidden = old_is_doc_hidden;
pushed.times(|| { for _ in range(0, pushed) {
let (lint, lvl, src) = self.lint_stack.pop().unwrap(); let (lint, lvl, src) = self.lint_stack.pop().unwrap();
self.set_level(lint, lvl, src); self.set_level(lint, lvl, src);
}) }
} }
fn visit_ids(&self, f: |&mut ast_util::IdVisitor<Context>|) { fn visit_ids(&self, f: |&mut ast_util::IdVisitor<Context>|) {

View file

@ -229,12 +229,12 @@ pub fn const_expr(cx: @CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
ty::AutoDerefRef(ref adj) => { ty::AutoDerefRef(ref adj) => {
let mut ty = ety; let mut ty = ety;
let mut maybe_ptr = None; let mut maybe_ptr = None;
adj.autoderefs.times(|| { for _ in range(0, adj.autoderefs) {
let (dv, dt) = const_deref(cx, llconst, ty, false); let (dv, dt) = const_deref(cx, llconst, ty, false);
maybe_ptr = Some(llconst); maybe_ptr = Some(llconst);
llconst = dv; llconst = dv;
ty = dt; ty = dt;
}); }
match adj.autoref { match adj.autoref {
None => { } None => { }

View file

@ -38,11 +38,11 @@ fn read_u32v_be(dst: &mut[u32], input: &[u8]) {
unsafe { unsafe {
let mut x: *mut i32 = transmute(dst.unsafe_mut_ref(0)); let mut x: *mut i32 = transmute(dst.unsafe_mut_ref(0));
let mut y: *i32 = transmute(input.unsafe_ref(0)); let mut y: *i32 = transmute(input.unsafe_ref(0));
dst.len().times(|| { for _ in range(0, dst.len()) {
*x = to_be32(*y); *x = to_be32(*y);
x = x.offset(1); x = x.offset(1);
y = y.offset(1); y = y.offset(1);
}); }
} }
} }

View file

@ -51,11 +51,11 @@ fn read_u32v_be(dst: &mut[u32], input: &[u8]) {
unsafe { unsafe {
let mut x: *mut i32 = transmute(dst.unsafe_mut_ref(0)); let mut x: *mut i32 = transmute(dst.unsafe_mut_ref(0));
let mut y: *i32 = transmute(input.unsafe_ref(0)); let mut y: *i32 = transmute(input.unsafe_ref(0));
dst.len().times(|| { for _ in range(0, dst.len()) {
*x = to_be32(*y); *x = to_be32(*y);
x = x.offset(1); x = x.offset(1);
y = y.offset(1); y = y.offset(1);
}) }
} }
} }

View file

@ -1227,17 +1227,17 @@ mod test {
}) })
test!(fn oneshot_multi_thread_close_stress() { test!(fn oneshot_multi_thread_close_stress() {
stress_factor().times(|| { for _ in range(0, stress_factor()) {
let (port, chan) = Chan::<int>::new(); let (port, chan) = Chan::<int>::new();
spawn(proc() { spawn(proc() {
let _p = port; let _p = port;
}); });
let _chan = chan; let _chan = chan;
}) }
}) })
test!(fn oneshot_multi_thread_send_close_stress() { test!(fn oneshot_multi_thread_send_close_stress() {
stress_factor().times(|| { for _ in range(0, stress_factor()) {
let (port, chan) = Chan::<int>::new(); let (port, chan) = Chan::<int>::new();
spawn(proc() { spawn(proc() {
let _p = port; let _p = port;
@ -1245,11 +1245,11 @@ mod test {
task::try(proc() { task::try(proc() {
chan.send(1); chan.send(1);
}); });
}) }
}) })
test!(fn oneshot_multi_thread_recv_close_stress() { test!(fn oneshot_multi_thread_recv_close_stress() {
stress_factor().times(|| { for _ in range(0, stress_factor()) {
let (port, chan) = Chan::<int>::new(); let (port, chan) = Chan::<int>::new();
spawn(proc() { spawn(proc() {
let port = port; let port = port;
@ -1264,11 +1264,11 @@ mod test {
let _chan = chan; let _chan = chan;
}); });
}); });
}) }
}) })
test!(fn oneshot_multi_thread_send_recv_stress() { test!(fn oneshot_multi_thread_send_recv_stress() {
stress_factor().times(|| { for _ in range(0, stress_factor()) {
let (port, chan) = Chan::<~int>::new(); let (port, chan) = Chan::<~int>::new();
spawn(proc() { spawn(proc() {
chan.send(~10); chan.send(~10);
@ -1276,11 +1276,11 @@ mod test {
spawn(proc() { spawn(proc() {
assert!(port.recv() == ~10); assert!(port.recv() == ~10);
}); });
}) }
}) })
test!(fn stream_send_recv_stress() { test!(fn stream_send_recv_stress() {
stress_factor().times(|| { for _ in range(0, stress_factor()) {
let (port, chan) = Chan::<~int>::new(); let (port, chan) = Chan::<~int>::new();
send(chan, 0); send(chan, 0);
@ -1303,29 +1303,29 @@ mod test {
recv(port, i + 1); recv(port, i + 1);
}); });
} }
}) }
}) })
test!(fn recv_a_lot() { test!(fn recv_a_lot() {
// Regression test that we don't run out of stack in scheduler context // Regression test that we don't run out of stack in scheduler context
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
10000.times(|| { chan.send(()) }); for _ in range(0, 10000) { chan.send(()); }
10000.times(|| { port.recv() }); for _ in range(0, 10000) { port.recv(); }
}) })
test!(fn shared_chan_stress() { test!(fn shared_chan_stress() {
let (port, chan) = SharedChan::new(); let (port, chan) = SharedChan::new();
let total = stress_factor() + 100; let total = stress_factor() + 100;
total.times(|| { for _ in range(0, total) {
let chan_clone = chan.clone(); let chan_clone = chan.clone();
spawn(proc() { spawn(proc() {
chan_clone.send(()); chan_clone.send(());
}); });
}); }
total.times(|| { for _ in range(0, total) {
port.recv(); port.recv();
}); }
}) })
test!(fn test_nested_recv_iter() { test!(fn test_nested_recv_iter() {

View file

@ -379,10 +379,10 @@ mod test {
let (p3, c3) = Chan::<int>::new(); let (p3, c3) = Chan::<int>::new();
spawn(proc() { spawn(proc() {
20.times(task::deschedule); for _ in range(0, 20) { task::deschedule(); }
c1.send(1); c1.send(1);
p3.recv(); p3.recv();
20.times(task::deschedule); for _ in range(0, 20) { task::deschedule(); }
}); });
select! ( select! (
@ -402,7 +402,7 @@ mod test {
let (p3, c3) = Chan::<()>::new(); let (p3, c3) = Chan::<()>::new();
spawn(proc() { spawn(proc() {
20.times(task::deschedule); for _ in range(0, 20) { task::deschedule(); }
c1.send(1); c1.send(1);
c2.send(2); c2.send(2);
p3.recv(); p3.recv();

View file

@ -355,15 +355,15 @@ mod test {
iotest!(fn multiple_connect_serial_ip4() { iotest!(fn multiple_connect_serial_ip4() {
let addr = next_test_ip4(); let addr = next_test_ip4();
let max = 10; let max = 10u;
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
spawn(proc() { spawn(proc() {
port.recv(); port.recv();
max.times(|| { for _ in range(0, max) {
let mut stream = TcpStream::connect(addr); let mut stream = TcpStream::connect(addr);
stream.write([99]); stream.write([99]);
}); }
}); });
let mut acceptor = TcpListener::bind(addr).listen(); let mut acceptor = TcpListener::bind(addr).listen();
@ -377,15 +377,15 @@ mod test {
iotest!(fn multiple_connect_serial_ip6() { iotest!(fn multiple_connect_serial_ip6() {
let addr = next_test_ip6(); let addr = next_test_ip6();
let max = 10; let max = 10u;
let (port, chan) = Chan::new(); let (port, chan) = Chan::new();
spawn(proc() { spawn(proc() {
port.recv(); port.recv();
max.times(|| { for _ in range(0, max) {
let mut stream = TcpStream::connect(addr); let mut stream = TcpStream::connect(addr);
stream.write([99]); stream.write([99]);
}); }
}); });
let mut acceptor = TcpListener::bind(addr).listen(); let mut acceptor = TcpListener::bind(addr).listen();

View file

@ -234,20 +234,20 @@ mod tests {
spawn(proc() { spawn(proc() {
port.recv(); port.recv();
times.times(|| { for _ in range(0, times) {
let mut stream = UnixStream::connect(&path2); let mut stream = UnixStream::connect(&path2);
stream.write([100]); stream.write([100]);
}) }
}); });
let mut acceptor = UnixListener::bind(&path1).listen(); let mut acceptor = UnixListener::bind(&path1).listen();
chan.send(()); chan.send(());
times.times(|| { for _ in range(0, times) {
let mut client = acceptor.accept(); let mut client = acceptor.accept();
let mut buf = [0]; let mut buf = [0];
client.read(buf); client.read(buf);
assert_eq!(buf[0], 100); assert_eq!(buf[0], 100);
}) }
} }
#[test] #[test]

View file

@ -139,18 +139,6 @@ pub trait Signed: Num
pub trait Unsigned: Num {} pub trait Unsigned: Num {}
/// Times trait
///
/// ```rust
/// let ten = 10u;
/// let mut accum = 0;
/// ten.times(|| { accum += 1; })
/// ```
///
pub trait Times {
fn times(&self, it: ||);
}
pub trait Integer: Num pub trait Integer: Num
+ Orderable + Orderable
+ Div<Self,Self> + Div<Self,Self>

View file

@ -20,7 +20,6 @@ use num::{Bitwise, Bounded};
use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedAdd, CheckedSub, CheckedMul};
use num::{CheckedDiv, Zero, One, strconv}; use num::{CheckedDiv, Zero, One, strconv};
use num::{ToStrRadix, FromStrRadix}; use num::{ToStrRadix, FromStrRadix};
use num;
use option::{Option, Some, None}; use option::{Option, Some, None};
use str; use str;
use unstable::intrinsics; use unstable::intrinsics;
@ -80,27 +79,6 @@ pub fn div_round(x: uint, y: uint) -> uint {
/// ///
pub fn div_floor(x: uint, y: uint) -> uint { return x / y; } pub fn div_floor(x: uint, y: uint) -> uint { return x / y; }
impl num::Times for uint {
#[inline]
///
/// A convenience form for basic repetition. Given a uint `x`,
/// `x.times(|| { ... })` executes the given block x times.
///
/// Equivalent to `for uint::range(0, x) |_| { ... }`.
///
/// Not defined on all integer types to permit unambiguous
/// use with integer literals of inferred integer-type as
/// the self-value (eg. `100.times(|| { ... })`).
///
fn times(&self, it: ||) {
let mut i = *self;
while i > 0 {
it();
i -= 1;
}
}
}
/// Returns the smallest power of 2 greater than or equal to `n` /// Returns the smallest power of 2 greater than or equal to `n`
#[inline] #[inline]
pub fn next_power_of_two(n: uint) -> uint { pub fn next_power_of_two(n: uint) -> uint {
@ -245,12 +223,3 @@ fn test_div() {
assert!((div_ceil(3u, 4u) == 1u)); assert!((div_ceil(3u, 4u) == 1u));
assert!((div_round(3u, 4u) == 1u)); assert!((div_round(3u, 4u) == 1u));
} }
#[test]
pub fn test_times() {
use num::Times;
let ten = 10 as uint;
let mut accum = 0;
ten.times(|| { accum += 1; });
assert!((accum == 10));
}

View file

@ -57,7 +57,6 @@ pub use hash::Hash;
pub use iter::{FromIterator, Extendable}; pub use iter::{FromIterator, Extendable};
pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator}; pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator};
pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize}; pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize};
pub use num::Times;
pub use num::{Integer, Real, Num, NumCast, CheckedAdd, CheckedSub, CheckedMul}; pub use num::{Integer, Real, Num, NumCast, CheckedAdd, CheckedSub, CheckedMul};
pub use num::{Orderable, Signed, Unsigned, Round}; pub use num::{Orderable, Signed, Unsigned, Round};
pub use num::{Primitive, Int, Float, ToStrRadix, ToPrimitive, FromPrimitive}; pub use num::{Primitive, Int, Float, ToStrRadix, ToPrimitive, FromPrimitive};

View file

@ -12,7 +12,6 @@
use rand::{Rng, SeedableRng, OSRng}; use rand::{Rng, SeedableRng, OSRng};
use iter::{Iterator, range, range_step, Repeat}; use iter::{Iterator, range, range_step, Repeat};
use num::Times;
use option::{None, Some}; use option::{None, Some};
use vec::{raw, MutableVector, ImmutableVector}; use vec::{raw, MutableVector, ImmutableVector};
use mem; use mem;
@ -95,7 +94,7 @@ impl IsaacRng {
}} }}
); );
4.times(|| mix!()); for _ in range(0, 4) { mix!(); }
if use_rsl { if use_rsl {
macro_rules! memloop ( macro_rules! memloop (

View file

@ -14,6 +14,7 @@ use codemap;
use std::cell::Cell; use std::cell::Cell;
use std::io; use std::io;
use std::io::stdio::StdWriter; use std::io::stdio::StdWriter;
use std::iter::range;
use std::local_data; use std::local_data;
use extra::term; use extra::term;
@ -320,7 +321,7 @@ fn highlight_lines(cm: &codemap::CodeMap,
// Skip is the number of characters we need to skip because they are // Skip is the number of characters we need to skip because they are
// part of the 'filename:line ' part of the previous line. // part of the 'filename:line ' part of the previous line.
let skip = fm.name.len() + digits + 3u; let skip = fm.name.len() + digits + 3u;
skip.times(|| s.push_char(' ')); for _ in range(0, skip) { s.push_char(' '); }
let orig = fm.get_line(lines.lines[0] as int); let orig = fm.get_line(lines.lines[0] as int);
for pos in range(0u, left-skip) { for pos in range(0u, left-skip) {
let curChar = (orig[pos] as char); let curChar = (orig[pos] as char);
@ -339,7 +340,7 @@ fn highlight_lines(cm: &codemap::CodeMap,
if hi.col != lo.col { if hi.col != lo.col {
// the ^ already takes up one space // the ^ already takes up one space
let num_squigglies = hi.col.to_uint()-lo.col.to_uint()-1u; let num_squigglies = hi.col.to_uint()-lo.col.to_uint()-1u;
num_squigglies.times(|| s.push_char('~')); for _ in range(0, num_squigglies) { s.push_char('~'); }
} }
print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color())); print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color()));
} }
@ -378,7 +379,7 @@ fn custom_highlight_lines(cm: &codemap::CodeMap,
// Span seems to use half-opened interval, so subtract 1 // Span seems to use half-opened interval, so subtract 1
let skip = last_line_start.len() + hi.col.to_uint() - 1; let skip = last_line_start.len() + hi.col.to_uint() - 1;
let mut s = ~""; let mut s = ~"";
skip.times(|| s.push_char(' ')); for _ in range(0, skip) { s.push_char(' '); }
s.push_char('^'); s.push_char('^');
print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color())); print_maybe_styled(s + "\n", term::attr::ForegroundColor(lvl.color()));
} }

View file

@ -396,9 +396,9 @@ pub fn parse(sess: @ParseSess,
} }
cur_eis.push(ei); cur_eis.push(ei);
rust_parser.tokens_consumed.times(|| { for _ in range(0, rust_parser.tokens_consumed) {
let _ = rdr.next_token(); let _ = rdr.next_token();
}); }
} }
} }

View file

@ -29,25 +29,25 @@ fn ping_pong_bench(n: uint, m: uint) {
spawn(proc() { spawn(proc() {
let chan = ca; let chan = ca;
let port = pb; let port = pb;
n.times(|| { for _ in range(0, n) {
chan.send(()); chan.send(());
port.recv(); port.recv();
}) }
}); });
spawn(proc() { spawn(proc() {
let chan = cb; let chan = cb;
let port = pa; let port = pa;
n.times(|| { for _ in range(0, n) {
port.recv(); port.recv();
chan.send(()); chan.send(());
}) }
}); });
} }
m.times(|| { for _ in range(0, m) {
run_pair(n) run_pair(n)
}) }
} }

View file

@ -26,8 +26,8 @@ fn main() {
100000 100000
}; };
n.times(|| { for _ in range(0, n) {
spawn(proc() {}); spawn(proc() {});
}) }
} }

View file

@ -39,9 +39,9 @@ fn block_overarching_alias_mut() {
let mut v = ~3; let mut v = ~3;
let mut x = &mut v; let mut x = &mut v;
3.times(|| { for _ in range(0, 3) {
borrow(v); //~ ERROR cannot borrow borrow(v); //~ ERROR cannot borrow
}); }
*x = ~5; *x = ~5;
} }

View file

@ -9,5 +9,5 @@
// except according to those terms. // except according to those terms.
fn main() { fn main() {
let _f = 10.times; //~ ERROR attempted to take value of method let _f = 10i.abs; //~ ERROR attempted to take value of method
} }

View file

@ -41,11 +41,11 @@ fn count(n: uint) -> uint {
} }
fn main() { fn main() {
10u.times(proc() { for _ in range(0, 10u) {
task::spawn(proc() { task::spawn(proc() {
let result = count(5u); let result = count(5u);
info!("result = %?", result); info!("result = %?", result);
fail!(); fail!();
}); });
}); }
} }

View file

@ -20,5 +20,5 @@ fn bitv_test() {
} }
pub fn main() { pub fn main() {
10000.times(|| bitv_test()); for _ in range(0, 10000) { bitv_test(); }
} }

View file

@ -72,9 +72,9 @@ pub fn main() {
roundtrip::<C>(); roundtrip::<C>();
roundtrip::<D>(); roundtrip::<D>();
20.times(|| { for _ in range(0, 20) {
roundtrip::<E>(); roundtrip::<E>();
roundtrip::<F>(); roundtrip::<F>();
roundtrip::<G<int>>(); roundtrip::<G<int>>();
}) }
} }

View file

@ -34,10 +34,10 @@ enum D {
pub fn main() { pub fn main() {
// check there's no segfaults // check there's no segfaults
20.times(|| { for _ in range(0, 20) {
rand::random::<A>(); rand::random::<A>();
rand::random::<B>(); rand::random::<B>();
rand::random::<C>(); rand::random::<C>();
rand::random::<D>(); rand::random::<D>();
}) }
} }

View file

@ -41,9 +41,9 @@ fn count(n: uint) -> uint {
} }
pub fn main() { pub fn main() {
100u.times(|| { for _ in range(0, 100u) {
task::spawn(proc() { task::spawn(proc() {
assert_eq!(count(5u), 16u); assert_eq!(count(5u), 16u);
}); });
}) }
} }

View file

@ -38,11 +38,11 @@ fn count(n: uint) -> uint {
} }
pub fn main() { pub fn main() {
10u.times(|| { for _ in range(0, 10u) {
task::spawn(proc() { task::spawn(proc() {
let result = count(5u); let result = count(5u);
info!("result = {}", result); info!("result = {}", result);
assert_eq!(result, 16u); assert_eq!(result, 16u);
}); });
}) }
} }

View file

@ -1,6 +1,6 @@
pub fn main() { pub fn main() {
let mut x = 0; let mut x = 0;
4096.times(|| x += 1); for _ in range(0, 4096) { x += 1; }
assert_eq!(x, 4096); assert_eq!(x, 4096);
println!("x = {}", x); println!("x = {}", x);
} }

View file

@ -65,7 +65,7 @@ fn AsciiArt(width: uint, height: uint, fill: char) -> AsciiArt {
// Use an anonymous function to build a vector of vectors containing // Use an anonymous function to build a vector of vectors containing
// blank characters for each position in our canvas. // blank characters for each position in our canvas.
let lines = vec::build(Some(height), |push| { let lines = vec::build(Some(height), |push| {
height.times(|| push(vec::from_elem(width, '.'))) for _ in range(0, height) { push(vec::from_elem(width, '.')); }
}); });
// Rust code often returns values by omitting the trailing semi-colon // Rust code often returns values by omitting the trailing semi-colon

View file

@ -44,17 +44,16 @@ priv fn parse_data(len: uint, io: @io::Reader) -> Result {
} }
priv fn parse_list(len: uint, io: @io::Reader) -> Result { priv fn parse_list(len: uint, io: @io::Reader) -> Result {
let mut list: ~[Result] = ~[]; let mut list: ~[Result] = ~[];
len.times(proc() { for _ in range(0, len) {
let v = let v = match io.read_char() {
match io.read_char() { '$' => parse_bulk(io),
'$' => parse_bulk(io), ':' => parse_int(io),
':' => parse_int(io), _ => fail!()
_ => fail!() };
}); list.push(v);
list.push(v);
} }
return List(list); return List(list);
} }
priv fn chop(s: ~str) -> ~str { priv fn chop(s: ~str) -> ~str {

View file

@ -1,6 +1,6 @@
pub fn main() { pub fn main() {
let mut count = 0; let mut count = 0;
999_999.times(|| count += 1); for _ in range(0, 999_999) { count += 1; }
assert_eq!(count, 999_999); assert_eq!(count, 999_999);
println!("{}", count); println!("{}", count);
} }

View file

@ -14,7 +14,7 @@ trait Fooable {
impl Fooable for uint { impl Fooable for uint {
fn yes(self) { fn yes(self) {
self.times(|| println!("yes")); for _ in range(0, self) { println!("yes"); }
} }
} }

View file

@ -31,9 +31,6 @@ pub fn main() {
assert_eq!(15u32.add(&6u32), 21u32); assert_eq!(15u32.add(&6u32), 21u32);
assert_eq!(15u64.add(&6u64), 21u64); assert_eq!(15u64.add(&6u64), 21u64);
// times
15u.times(|| {});
// floats // floats
// num // num
assert_eq!(10f32.to_int().unwrap(), 10); assert_eq!(10f32.to_int().unwrap(), 10);