use std; import task; import task::task; import comm; import comm::Chan; import comm::chan; import comm::port; import comm::send; import comm::recv; fn main() { test00(); // test01(); test02(); test04(); test05(); test06(); } fn test00_start(ch: Chan, message: int, count: int) { debug!{"Starting test00_start"}; let mut i: int = 0; while i < count { debug!{"Sending Message"}; send(ch, message + 0); i = i + 1; } debug!{"Ending test00_start"}; } fn test00() { let number_of_tasks: int = 1; let number_of_messages: int = 4; debug!{"Creating tasks"}; let po = port(); let ch = chan(po); let mut i: int = 0; let mut results = ~[]; while i < number_of_tasks { i = i + 1; do task::task().future_result(|+r| { results += ~[r]; }).spawn |copy i| { test00_start(ch, i, number_of_messages); } } let mut sum: int = 0; for results.each |r| { i = 0; while i < number_of_messages { sum += recv(po); i = i + 1; } } for results.each |r| { future::get(&r); } debug!{"Completed: Final number is: "}; assert (sum == number_of_messages * (number_of_tasks * number_of_tasks + number_of_tasks) / 2); } fn test01() { let p = port(); debug!{"Reading from a port that is never written to."}; let value: int = recv(p); log(debug, value); } fn test02() { let p = port(); let c = chan(p); debug!{"Writing to a local task channel."}; send(c, 42); debug!{"Reading from a local task port."}; let value: int = recv(p); log(debug, value); } fn test04_start() { debug!{"Started task"}; let mut i: int = 1024 * 1024; while i > 0 { i = i - 1; } debug!{"Finished task"}; } fn test04() { debug!{"Spawning lots of tasks."}; let mut i: int = 4; while i > 0 { i = i - 1; task::spawn(|| test04_start() ); } debug!{"Finishing up."}; } fn test05_start(ch: Chan) { send(ch, 10); send(ch, 20); send(ch, 30); send(ch, 30); send(ch, 30); } fn test05() { let po = comm::port(); let ch = chan(po); task::spawn(|| test05_start(ch) ); let mut value: int; value = recv(po); value = recv(po); value = recv(po); log(debug, value); } fn test06_start(&&task_number: int) { debug!{"Started task."}; let mut i: int = 0; while i < 1000000 { i = i + 1; } debug!{"Finished task."}; } fn test06() { let number_of_tasks: int = 4; debug!{"Creating tasks"}; let mut i: int = 0; let mut results = ~[]; while i < number_of_tasks { i = i + 1; do task::task().future_result(|+r| { results += ~[r]; }).spawn |copy i| { test06_start(i); }; } for results.each |r| { future::get(&r); } }