1
Fork 0

test: Fix tests and the pipe compiler

This commit is contained in:
Patrick Walton 2013-05-06 19:29:04 -07:00
parent db4573a776
commit 278b487cab
27 changed files with 151 additions and 126 deletions

View file

@ -448,10 +448,15 @@ impl TyVisitor for ReprVisitor {
true true
} }
fn visit_enter_enum(&self, _n_variants: uint, fn visit_enter_enum(&self,
_n_variants: uint,
get_disr: extern unsafe fn(ptr: *Opaque) -> int, get_disr: extern unsafe fn(ptr: *Opaque) -> int,
_sz: uint, _align: uint) -> bool { _sz: uint,
let disr = unsafe { get_disr(transmute(self.ptr)) }; _align: uint) -> bool {
let var_stk: &mut ~[VariantState] = self.var_stk;
let disr = unsafe {
get_disr(transmute(*self.ptr))
};
self.var_stk.push(SearchingFor(disr)); self.var_stk.push(SearchingFor(disr));
true true
} }
@ -484,31 +489,12 @@ impl TyVisitor for ReprVisitor {
true true
} }
<<<<<<< HEAD fn visit_enum_variant_field(&self,
fn visit_enum_variant_field(&self, i: uint, _offset: uint, inner: *TyDesc) -> bool { i: uint,
match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] { _offset: uint,
======= inner: *TyDesc)
#[cfg(stage0)]
fn visit_enum_variant_field(&self, i: uint, inner: *TyDesc) -> bool {
match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] {
Degenerate | TagMatch => {
if i != 0 {
self.writer.write_str(", ");
}
if ! self.visit_inner(inner) {
return false;
}
}
TagMismatch => ()
}
true
}
#[cfg(not(stage0))]
fn visit_enum_variant_field(&self, i: uint, _: uint, inner: *TyDesc)
-> bool { -> bool {
match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] { match self.var_stk[vec::uniq_len(&const self.var_stk) - 1] {
>>>>>>> libcore: Remove mutable fields from repr
Matched => { Matched => {
if i != 0 { if i != 0 {
self.writer.write_str(", "); self.writer.write_str(", ");
@ -522,26 +508,6 @@ impl TyVisitor for ReprVisitor {
true true
} }
<<<<<<< HEAD
=======
#[cfg(stage0)]
fn visit_leave_enum_variant(&self, _variant: uint,
_disr_val: int,
n_fields: uint,
_name: &str) -> bool {
match self.var_stk[vec::uniq_len(&const *self.var_stk) - 1] {
Degenerate | TagMatch => {
if n_fields > 0 {
self.writer.write_char(')');
}
}
TagMismatch => ()
}
true
}
#[cfg(not(stage0))]
>>>>>>> libcore: Remove mutable fields from repr
fn visit_leave_enum_variant(&self, _variant: uint, fn visit_leave_enum_variant(&self, _variant: uint,
_disr_val: int, _disr_val: int,
n_fields: uint, n_fields: uint,
@ -557,9 +523,13 @@ impl TyVisitor for ReprVisitor {
true true
} }
fn visit_leave_enum(&self, _n_variants: uint, fn visit_leave_enum(&self,
_n_variants: uint,
_get_disr: extern unsafe fn(ptr: *Opaque) -> int, _get_disr: extern unsafe fn(ptr: *Opaque) -> int,
_sz: uint, _align: uint) -> bool { _sz: uint,
_align: uint)
-> bool {
let var_stk: &mut ~[VariantState] = self.var_stk;
match self.var_stk.pop() { match self.var_stk.pop() {
SearchingFor(*) => fail!(~"enum value matched no variant"), SearchingFor(*) => fail!(~"enum value matched no variant"),
_ => true _ => true

View file

@ -230,12 +230,14 @@ pub impl TaskBuilder {
/// the child. /// the child.
fn supervised(&mut self) { fn supervised(&mut self) {
self.opts.supervised = true; self.opts.supervised = true;
self.opts.linked = false;
} }
/// Link the child task's and parent task's failures. If either fails, the /// Link the child task's and parent task's failures. If either fails, the
/// other will be killed. /// other will be killed.
fn linked(&mut self) { fn linked(&mut self) {
self.opts.linked = true; self.opts.linked = true;
self.opts.supervised = false;
} }
/** /**

View file

@ -64,6 +64,7 @@ impl gen_send for message {
let mut body = ~"{\n"; let mut body = ~"{\n";
body += fmt!("use super::%s;\n", name); body += fmt!("use super::%s;\n", name);
body += ~"let mut pipe = pipe;\n";
if this.proto.is_bounded() { if this.proto.is_bounded() {
let (sp, rp) = match (this.dir, next.dir) { let (sp, rp) = match (this.dir, next.dir) {
@ -73,12 +74,12 @@ impl gen_send for message {
(recv, recv) => (~"c", ~"s") (recv, recv) => (~"c", ~"s")
}; };
body += ~"let b = pipe.reuse_buffer();\n"; body += ~"let mut b = pipe.reuse_buffer();\n";
body += fmt!("let %s = ::core::pipes::SendPacketBuffered(\ body += fmt!("let %s = ::core::pipes::SendPacketBuffered(\
&(b.buffer.data.%s));\n", &mut (b.buffer.data.%s));\n",
sp, next.name); sp, next.name);
body += fmt!("let %s = ::core::pipes::RecvPacketBuffered(\ body += fmt!("let %s = ::core::pipes::RecvPacketBuffered(\
&(b.buffer.data.%s));\n", &mut (b.buffer.data.%s));\n",
rp, next.name); rp, next.name);
} }
else { else {
@ -366,7 +367,7 @@ impl gen_init for protocol {
fmt!("data.%s.set_buffer(buffer)", fmt!("data.%s.set_buffer(buffer)",
s.name))), s.name))),
ext_cx.parse_expr(fmt!( ext_cx.parse_expr(fmt!(
"::core::ptr::to_unsafe_ptr(&(data.%s))", "::core::ptr::to_mut_unsafe_ptr(&mut (data.%s))",
self.states[0].name)))); self.states[0].name))));
quote_expr!({ quote_expr!({

View file

@ -103,7 +103,7 @@ fn main() {
let mut rand = vec::with_capacity(n_keys); let mut rand = vec::with_capacity(n_keys);
{ {
let rng = core::rand::IsaacRng::new_seeded([1, 1, 1, 1, 1, 1, 1]); let mut rng = core::rand::IsaacRng::new_seeded([1, 1, 1, 1, 1, 1, 1]);
let mut set = HashSet::new(); let mut set = HashSet::new();
while set.len() != n_keys { while set.len() != n_keys {
let next = rng.next() as uint; let next = rng.next() as uint;

View file

@ -31,8 +31,13 @@ fn timed(result: &mut float, op: &fn()) {
} }
pub impl Results { pub impl Results {
fn bench_int<T:Set<uint>, R: rand::Rng>(&mut self, rng: &R, num_keys: uint, fn bench_int<T:Set<uint>,
rand_cap: uint, f: &fn() -> T) { R: rand::Rng>(
&mut self,
rng: &mut R,
num_keys: uint,
rand_cap: uint,
f: &fn() -> T) {
{ {
let mut set = f(); let mut set = f();
do timed(&mut self.sequential_ints) { do timed(&mut self.sequential_ints) {
@ -69,8 +74,12 @@ pub impl Results {
} }
} }
fn bench_str<T:Set<~str>, R: rand::Rng>(&mut self, rng: &R, num_keys: uint, fn bench_str<T:Set<~str>,
f: &fn() -> T) { R:rand::Rng>(
&mut self,
rng: &mut R,
num_keys: uint,
f: &fn() -> T) {
{ {
let mut set = f(); let mut set = f();
do timed(&mut self.sequential_strings) { do timed(&mut self.sequential_strings) {
@ -155,25 +164,25 @@ fn main() {
let max = 200000; let max = 200000;
{ {
let rng = rand::IsaacRng::new_seeded(seed); let mut rng = rand::IsaacRng::new_seeded(seed);
let mut results = empty_results(); let mut results = empty_results();
results.bench_int(&rng, num_keys, max, || HashSet::new::<uint>()); results.bench_int(&mut rng, num_keys, max, || HashSet::new::<uint>());
results.bench_str(&rng, num_keys, || HashSet::new::<~str>()); results.bench_str(&mut rng, num_keys, || HashSet::new::<~str>());
write_results("core::hashmap::HashSet", &results); write_results("core::hashmap::HashSet", &results);
} }
{ {
let rng = rand::IsaacRng::new_seeded(seed); let mut rng = rand::IsaacRng::new_seeded(seed);
let mut results = empty_results(); let mut results = empty_results();
results.bench_int(&rng, num_keys, max, || TreeSet::new::<uint>()); results.bench_int(&mut rng, num_keys, max, || TreeSet::new::<uint>());
results.bench_str(&rng, num_keys, || TreeSet::new::<~str>()); results.bench_str(&mut rng, num_keys, || TreeSet::new::<~str>());
write_results("std::treemap::TreeSet", &results); write_results("std::treemap::TreeSet", &results);
} }
{ {
let rng = rand::IsaacRng::new_seeded(seed); let mut rng = rand::IsaacRng::new_seeded(seed);
let mut results = empty_results(); let mut results = empty_results();
results.bench_int(&rng, num_keys, max, || BitvSet::new()); results.bench_int(&mut rng, num_keys, max, || BitvSet::new());
write_results("std::bitv::BitvSet", &results); write_results("std::bitv::BitvSet", &results);
} }
} }

View file

@ -33,12 +33,15 @@ fn main() {
fn maybe_run_test(argv: &[~str], name: ~str, test: &fn()) { fn maybe_run_test(argv: &[~str], name: ~str, test: &fn()) {
let mut run_test = false; let mut run_test = false;
if os::getenv(~"RUST_BENCH").is_some() { run_test = true } if os::getenv(~"RUST_BENCH").is_some() {
else if argv.len() > 0 { run_test = true
} else if argv.len() > 0 {
run_test = argv.contains(&~"all") || argv.contains(&name) run_test = argv.contains(&~"all") || argv.contains(&name)
} }
if !run_test { return } if !run_test {
return
}
let start = precise_time_s(); let start = precise_time_s();
test(); test();
@ -69,7 +72,7 @@ fn read_line() {
} }
fn vec_plus() { fn vec_plus() {
let r = rand::rng(); let mut r = rand::rng();
let mut v = ~[]; let mut v = ~[];
let mut i = 0; let mut i = 0;
@ -86,7 +89,7 @@ fn vec_plus() {
} }
fn vec_append() { fn vec_append() {
let r = rand::rng(); let mut r = rand::rng();
let mut v = ~[]; let mut v = ~[];
let mut i = 0; let mut i = 0;
@ -103,7 +106,7 @@ fn vec_append() {
} }
fn vec_push_all() { fn vec_push_all() {
let r = rand::rng(); let mut r = rand::rng();
let mut v = ~[]; let mut v = ~[];
for uint::range(0, 1500) |i| { for uint::range(0, 1500) |i| {

View file

@ -32,19 +32,20 @@ type graph = ~[~[node_id]];
type bfs_result = ~[node_id]; type bfs_result = ~[node_id];
fn make_edges(scale: uint, edgefactor: uint) -> ~[(node_id, node_id)] { fn make_edges(scale: uint, edgefactor: uint) -> ~[(node_id, node_id)] {
let r = rand::XorShiftRng::new(); let mut r = rand::XorShiftRng::new();
fn choose_edge<R: rand::Rng>(i: node_id, j: node_id, scale: uint, r: &R)
-> (node_id, node_id) {
fn choose_edge<R: rand::Rng>(i: node_id,
j: node_id,
scale: uint,
r: &mut R)
-> (node_id, node_id) {
let A = 0.57; let A = 0.57;
let B = 0.19; let B = 0.19;
let C = 0.19; let C = 0.19;
if scale == 0u { if scale == 0u {
(i, j) (i, j)
} } else {
else {
let i = i * 2i64; let i = i * 2i64;
let j = j * 2i64; let j = j * 2i64;
let scale = scale - 1u; let scale = scale - 1u;
@ -73,7 +74,7 @@ fn make_edges(scale: uint, edgefactor: uint) -> ~[(node_id, node_id)] {
} }
do vec::from_fn((1u << scale) * edgefactor) |_i| { do vec::from_fn((1u << scale) * edgefactor) |_i| {
choose_edge(0i64, 0i64, scale, &r) choose_edge(0i64, 0i64, scale, &mut r)
} }
} }
@ -103,7 +104,7 @@ fn make_graph(N: uint, edges: ~[(node_id, node_id)]) -> graph {
fn gen_search_keys(graph: &[~[node_id]], n: uint) -> ~[node_id] { fn gen_search_keys(graph: &[~[node_id]], n: uint) -> ~[node_id] {
let mut keys = HashSet::new(); let mut keys = HashSet::new();
let r = rand::rng(); let mut r = rand::rng();
while keys.len() < n { while keys.len() < n {
let k = r.gen_uint_range(0u, graph.len()); let k = r.gen_uint_range(0u, graph.len());

View file

@ -65,15 +65,15 @@ fn run(args: &[~str]) {
let mut worker_results = ~[]; let mut worker_results = ~[];
for uint::range(0, workers) |_i| { for uint::range(0, workers) |_i| {
let to_child = to_child.clone(); let to_child = to_child.clone();
do task::task().future_result(|+r| { let mut builder = task::task();
worker_results.push(r); builder.future_result(|r| worker_results.push(r));
}).spawn || { do builder.spawn {
for uint::range(0, size / workers) |_i| { for uint::range(0, size / workers) |_i| {
//error!("worker %?: sending %? bytes", i, num_bytes); //error!("worker %?: sending %? bytes", i, num_bytes);
to_child.send(bytes(num_bytes)); to_child.send(bytes(num_bytes));
} }
//error!("worker %? exiting", i); //error!("worker %? exiting", i);
}; }
} }
do task::spawn || { do task::spawn || {
server(&from_parent, &to_parent); server(&from_parent, &to_parent);

View file

@ -62,9 +62,9 @@ fn run(args: &[~str]) {
for uint::range(0, workers) |_i| { for uint::range(0, workers) |_i| {
let (from_parent_, to_child) = stream(); let (from_parent_, to_child) = stream();
from_parent.add(from_parent_); from_parent.add(from_parent_);
do task::task().future_result(|+r| { let mut builder = task::task();
worker_results.push(r); builder.future_result(|r| worker_results.push(r));
}).spawn || { do builder.spawn {
for uint::range(0, size / workers) |_i| { for uint::range(0, size / workers) |_i| {
//error!("worker %?: sending %? bytes", i, num_bytes); //error!("worker %?: sending %? bytes", i, num_bytes);
to_child.send(bytes(num_bytes)); to_child.send(bytes(num_bytes));

View file

@ -103,7 +103,9 @@ fn main() {
thread_ring(0, msg_per_task, num_chan.take(), num_port); thread_ring(0, msg_per_task, num_chan.take(), num_port);
// synchronize // synchronize
for futures.each |f| { f.get() }; for futures.each_mut |f| {
f.get()
}
let stop = time::precise_time_s(); let stop = time::precise_time_s();

View file

@ -96,7 +96,9 @@ fn main() {
thread_ring(0, msg_per_task, num_chan.take(), num_port); thread_ring(0, msg_per_task, num_chan.take(), num_port);
// synchronize // synchronize
for futures.each |f| { f.get() }; for futures.each_mut |f| {
let _ = f.get();
}
let stop = time::precise_time_s(); let stop = time::precise_time_s();

View file

@ -104,7 +104,9 @@ fn main() {
thread_ring(0, msg_per_task, num_chan.take(), num_port); thread_ring(0, msg_per_task, num_chan.take(), num_port);
// synchronize // synchronize
for futures.each |f| { f.get() }; for futures.each_mut |f| {
let _ = f.get();
}
let stop = time::precise_time_s(); let stop = time::precise_time_s();

View file

@ -13,7 +13,7 @@ fn lerp(a: f32, b: f32, v: f32) -> f32 { a * (1.0 - v) + b * v }
#[inline(always)] #[inline(always)]
fn smooth(v: f32) -> f32 { v * v * (3.0 - 2.0 * v) } fn smooth(v: f32) -> f32 { v * v * (3.0 - 2.0 * v) }
fn random_gradient<R:Rng>(r: &R) -> Vec2 { fn random_gradient<R:Rng>(r: &mut R) -> Vec2 {
let v = 2.0 * float::consts::pi * r.gen(); let v = 2.0 * float::consts::pi * r.gen();
Vec2 { Vec2 {
x: float::cos(v) as f32, x: float::cos(v) as f32,
@ -33,11 +33,15 @@ struct Noise2DContext {
pub impl Noise2DContext { pub impl Noise2DContext {
fn new() -> Noise2DContext { fn new() -> Noise2DContext {
let r = rand::rng(); let mut r = rand::rng();
let mut rgradients = [ Vec2 { x: 0.0, y: 0.0 }, ..256 ]; let mut rgradients = [ Vec2 { x: 0.0, y: 0.0 }, ..256 ];
for int::range(0, 256) |i| { rgradients[i] = random_gradient(&r); } for int::range(0, 256) |i| {
rgradients[i] = random_gradient(&mut r);
}
let mut permutations = [ 0, ..256 ]; let mut permutations = [ 0, ..256 ];
for int::range(0, 256) |i| { permutations[i] = i; } for int::range(0, 256) |i| {
permutations[i] = i;
}
r.shuffle_mut(permutations); r.shuffle_mut(permutations);
Noise2DContext { Noise2DContext {
@ -53,7 +57,11 @@ pub impl Noise2DContext {
} }
#[inline] #[inline]
fn get_gradients(&self, gradients: &mut [Vec2, ..4], origins: &mut [Vec2, ..4], x: f32, y: f32) { fn get_gradients(&self,
gradients: &mut [Vec2, ..4],
origins: &mut [Vec2, ..4],
x: f32,
y: f32) {
let x0f = f32::floor(x); let x0f = f32::floor(x);
let y0f = f32::floor(y); let y0f = f32::floor(y);
let x0 = x0f as int; let x0 = x0f as int;

View file

@ -63,7 +63,10 @@ fn make_random_fasta(wr: @io::Writer,
genelist: ~[AminoAcids], genelist: ~[AminoAcids],
n: int) { n: int) {
wr.write_line(~">" + id + ~" " + desc); wr.write_line(~">" + id + ~" " + desc);
let rng = @mut MyRandom {last: rand::rng().next()}; let mut rng = rand::rng();
let rng = @mut MyRandom {
last: rng.next()
};
let mut op: ~str = ~""; let mut op: ~str = ~"";
for uint::range(0u, n as uint) |_i| { for uint::range(0u, n as uint) |_i| {
str::push_char(&mut op, select_random(myrandom_next(rng, 100u32), str::push_char(&mut op, select_random(myrandom_next(rng, 100u32),

View file

@ -26,7 +26,6 @@ use core::int::range;
use core::comm::*; use core::comm::*;
use core::io::WriterUtil; use core::io::WriterUtil;
use core::result;
use core::result::{Ok, Err}; use core::result::{Ok, Err};
fn fib(n: int) -> int { fn fib(n: int) -> int {
@ -80,13 +79,15 @@ fn stress_task(&&id: int) {
fn stress(num_tasks: int) { fn stress(num_tasks: int) {
let mut results = ~[]; let mut results = ~[];
for range(0, num_tasks) |i| { for range(0, num_tasks) |i| {
do task::task().future_result(|+r| { let mut builder = task::task();
results.push(r); builder.future_result(|r| results.push(r));
}).spawn { do builder.spawn {
stress_task(i); stress_task(i);
} }
} }
for results.each |r| { r.recv(); } for results.each |r| {
r.recv();
}
} }
fn main() { fn main() {

View file

@ -48,7 +48,10 @@ fn grandchild_group(num_tasks: uint) {
fn spawn_supervised_blocking(myname: &str, +f: ~fn()) { fn spawn_supervised_blocking(myname: &str, +f: ~fn()) {
let mut res = None; let mut res = None;
task::task().future_result(|+r| res = Some(r)).supervised().spawn(f); let mut builder = task::task();
builder.future_result(|r| res = Some(r));
builder.supervised();
builder.spawn(f);
error!("%s group waiting", myname); error!("%s group waiting", myname);
let x = res.unwrap().recv(); let x = res.unwrap().recv();
assert!(x == task::Success); assert!(x == task::Success);

View file

@ -26,7 +26,8 @@ pub fn main() {
c2.send(()); c2.send(());
error!("child blocks"); error!("child blocks");
let (p, c) = comm::stream(); let (p, c) = comm::stream();
(p, p3).select(); let mut tuple = (p, p3);
tuple.select();
c.send(()); c.send(());
}; };
error!("parent tries"); error!("parent tries");

View file

@ -62,7 +62,7 @@ pub fn main() {
calllink09, calllink09,
calllink10 calllink10
]; ];
let rng = rand::rng(); let mut rng = rand::rng();
for fns.each |f| { for fns.each |f| {
let f = *f; let f = *f;
let sz = rng.next() % 256u32 + 256u32; let sz = rng.next() % 256u32 + 256u32;

View file

@ -22,11 +22,11 @@ proto! oneshot (
) )
pub fn main() { pub fn main() {
let (c, p) = oneshot::init(); let mut (c, p) = oneshot::init();
assert!(!pipes::peek(&p)); assert!(!pipes::peek(&mut p));
oneshot::client::signal(c); oneshot::client::signal(c);
assert!(pipes::peek(&p)); assert!(pipes::peek(&mut p));
} }

View file

@ -40,7 +40,7 @@ mod pingpong {
do pipes::entangle_buffer(buffer) |buffer, data| { do pipes::entangle_buffer(buffer) |buffer, data| {
data.ping.set_buffer(buffer); data.ping.set_buffer(buffer);
data.pong.set_buffer(buffer); data.pong.set_buffer(buffer);
ptr::to_unsafe_ptr(&(data.ping)) ptr::to_mut_unsafe_ptr(&mut (data.ping))
} }
} }
pub struct ping(server::pong); pub struct ping(server::pong);
@ -50,11 +50,11 @@ mod pingpong {
use core::pipes::*; use core::pipes::*;
use core::ptr; use core::ptr;
pub fn ping(+pipe: ping) -> pong { pub fn ping(mut pipe: ping) -> pong {
{ {
let b = pipe.reuse_buffer(); let mut b = pipe.reuse_buffer();
let s = SendPacketBuffered(&b.buffer.data.pong); let s = SendPacketBuffered(&mut b.buffer.data.pong);
let c = RecvPacketBuffered(&b.buffer.data.pong); let c = RecvPacketBuffered(&mut b.buffer.data.pong);
let message = ::pingpong::ping(s); let message = ::pingpong::ping(s);
send(pipe, message); send(pipe, message);
c c
@ -72,11 +72,11 @@ mod pingpong {
pub type ping = pipes::RecvPacketBuffered<::pingpong::ping, pub type ping = pipes::RecvPacketBuffered<::pingpong::ping,
::pingpong::Packets>; ::pingpong::Packets>;
pub fn pong(+pipe: pong) -> ping { pub fn pong(mut pipe: pong) -> ping {
{ {
let b = pipe.reuse_buffer(); let mut b = pipe.reuse_buffer();
let s = SendPacketBuffered(&b.buffer.data.ping); let s = SendPacketBuffered(&mut b.buffer.data.ping);
let c = RecvPacketBuffered(&b.buffer.data.ping); let c = RecvPacketBuffered(&mut b.buffer.data.ping);
let message = ::pingpong::pong(s); let message = ::pingpong::pong(s);
send(pipe, message); send(pipe, message);
c c

View file

@ -1,4 +1,8 @@
// xfail-fast // xfail-fast
// xfail-test
// XFAIL'd because this is going to be revamped, and it's not compatible as
// written with the new mutability rules.
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at // file at the top-level directory of this distribution and at

View file

@ -24,9 +24,15 @@ fn run(i: int) {
return; return;
} }
do task::task().sched_mode(task::PlatformThread).unlinked().spawn { let mut builder = task::task();
builder.sched_mode(task::PlatformThread);
builder.unlinked();
do builder.spawn {
task::yield(); task::yield();
do task::task().sched_mode(task::SingleThreaded).unlinked().spawn { let mut builder = task::task();
builder.sched_mode(task::SingleThreaded);
builder.unlinked();
do builder.spawn {
task::yield(); task::yield();
run(i - 1); run(i - 1);
task::yield(); task::yield();

View file

@ -17,7 +17,9 @@ fn start(&&task_number: int) { debug!("Started / Finished task."); }
fn test00() { fn test00() {
let i: int = 0; let i: int = 0;
let mut result = None; let mut result = None;
do task::task().future_result(|+r| { result = Some(r); }).spawn { let mut builder = task::task();
builder.future_result(|r| result = Some(r));
do builder.spawn {
start(i) start(i)
} }

View file

@ -40,9 +40,9 @@ fn test00() {
let mut results = ~[]; let mut results = ~[];
while i < number_of_tasks { while i < number_of_tasks {
let ch = po.chan(); let ch = po.chan();
task::task().future_result(|+r| { let mut builder = task::task();
results.push(r); builder.future_result(|r| results.push(r));
}).spawn({ builder.spawn({
let i = i; let i = i;
|| test00_start(&ch, i, number_of_messages) || test00_start(&ch, i, number_of_messages)
}); });

View file

@ -27,8 +27,9 @@ fn test00() {
let ch = p.chan(); let ch = p.chan();
let mut result = None; let mut result = None;
do task::task().future_result(|+r| { result = Some(r); }).spawn let mut builder = task::task();
|| { builder.future_result(|r| result = Some(r));
do builder.spawn {
test00_start(&ch, number_of_messages); test00_start(&ch, number_of_messages);
} }

View file

@ -11,7 +11,9 @@
pub fn main() { pub fn main() {
let mut result = None; let mut result = None;
task::task().future_result(|+r| { result = Some(r); }).spawn(child); let mut builder = task::task();
builder.future_result(|+r| { result = Some(r); });
builder.spawn(child);
error!("1"); error!("1");
task::yield(); task::yield();
error!("2"); error!("2");

View file

@ -11,7 +11,9 @@
pub fn main() { pub fn main() {
let mut result = None; let mut result = None;
task::task().future_result(|+r| { result = Some(r); }).spawn(child); let mut builder = task::task();
builder.future_result(|+r| { result = Some(r); });
builder.spawn(child);
error!("1"); error!("1");
task::yield(); task::yield();
result.unwrap().recv(); result.unwrap().recv();