diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-02-18 16:34:42 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-02-20 18:58:04 -0800 |
| commit | 4220dcf1e9de2c2d2c329ecefa80108b63a69145 (patch) | |
| tree | bd70397f064225f8d38b692f5f8120ed9e732d9e /src/test/run-pass | |
| parent | fbc95ba0184a417ff6d8b2b417f210c960e142cc (diff) | |
| download | rust-4220dcf1e9de2c2d2c329ecefa80108b63a69145.tar.gz rust-4220dcf1e9de2c2d2c329ecefa80108b63a69145.zip | |
core: New task API
Diffstat (limited to 'src/test/run-pass')
30 files changed, 96 insertions, 254 deletions
diff --git a/src/test/run-pass/binops.rs b/src/test/run-pass/binops.rs index 3fc83c5759d..e841345cba8 100644 --- a/src/test/run-pass/binops.rs +++ b/src/test/run-pass/binops.rs @@ -96,16 +96,6 @@ fn test_ptr() unsafe { assert p1 >= p2; } -fn test_task() { - fn f() { } - let f1 = f, f2 = f; - let t1 = task::spawn {|| f1(); }; - let t2 = task::spawn {|| f2(); }; - - assert (t1 == t1); - assert (t1 != t2); -} - fn test_fn() { fn f() { } fn g() { } @@ -147,7 +137,6 @@ fn main() { test_port(); test_chan(); test_ptr(); - test_task(); test_fn(); test_native_fn(); } diff --git a/src/test/run-pass/issue-507.rs b/src/test/run-pass/issue-507.rs index 3cb790063a9..7490f06d548 100644 --- a/src/test/run-pass/issue-507.rs +++ b/src/test/run-pass/issue-507.rs @@ -8,7 +8,6 @@ use std; import task; -import task::join; import comm; import comm::chan; import comm::send; @@ -18,21 +17,18 @@ import comm::recv; fn grandchild(c: chan<int>) { send(c, 42); } fn child(c: chan<int>) { - let _grandchild = task::spawn_joinable {|| grandchild(c); }; - join(_grandchild); + task::spawn {|| grandchild(c); } } fn main() { let p = comm::port(); let ch = chan(p); - let _child = task::spawn_joinable {|| child(ch); }; + task::spawn {|| child(ch); } let x: int = recv(p); log(debug, x); assert (x == 42); - - join(_child); } diff --git a/src/test/run-pass/issue-783.rs b/src/test/run-pass/issue-783.rs index 27384b102eb..0dc78cbaec3 100644 --- a/src/test/run-pass/issue-783.rs +++ b/src/test/run-pass/issue-783.rs @@ -21,6 +21,7 @@ fn a() { } fn main() { - let t = spawn_joinable {|| a(); }; - join(t); + iter::repeat(100u) {|| + spawn {|| a(); } + } } diff --git a/src/test/run-pass/join.rs b/src/test/run-pass/join.rs deleted file mode 100644 index ef4073406b4..00000000000 --- a/src/test/run-pass/join.rs +++ /dev/null @@ -1,15 +0,0 @@ -// -*- rust -*- - -use std; - -import task::*; - -fn main() { - let other = spawn_joinable {|| child(); }; - #error("1"); - yield(); - join(other); - #error("3"); -} - -fn child() { #error("2"); } diff --git a/src/test/run-pass/linked-failure.rs b/src/test/run-pass/linked-failure.rs deleted file mode 100644 index b82aa7c2cb0..00000000000 --- a/src/test/run-pass/linked-failure.rs +++ /dev/null @@ -1,21 +0,0 @@ -// -*- rust -*- -// xfail-win32 -use std; -import task; -import comm::port; -import comm::recv; - -fn child() { assert (1 == 2); } - -fn parent() { - // Since this task isn't supervised it won't bring down the whole - // process - task::unsupervise(); - let p = port::<int>(); - task::spawn {|| child(); }; - let x = recv(p); -} - -fn main() { - task::spawn {|| parent(); }; -} \ No newline at end of file diff --git a/src/test/run-pass/lots-a-fail.rs b/src/test/run-pass/lots-a-fail.rs index 9f51b688b11..924c0ea8a7a 100644 --- a/src/test/run-pass/lots-a-fail.rs +++ b/src/test/run-pass/lots-a-fail.rs @@ -9,12 +9,13 @@ fn die() { } fn iloop() { - task::unsupervise(); task::spawn {|| die(); }; } fn main() { uint::range(0u, 100u) {|_i| - task::spawn {|| iloop(); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| iloop(); }; } } \ No newline at end of file diff --git a/src/test/run-pass/morestack5.rs b/src/test/run-pass/morestack5.rs index ecd187ae44a..db67db86626 100644 --- a/src/test/run-pass/morestack5.rs +++ b/src/test/run-pass/morestack5.rs @@ -12,7 +12,7 @@ fn getbig(&&i: int) { fn main() { let sz = 400u; while sz < 500u { - task::join(task::spawn_joinable {|| getbig(200) }); + task::try {|| getbig(200) }; sz += 1u; } } \ No newline at end of file diff --git a/src/test/run-pass/morestack6.rs b/src/test/run-pass/morestack6.rs index 87ff60f13a7..6d8ac3c38f8 100644 --- a/src/test/run-pass/morestack6.rs +++ b/src/test/run-pass/morestack6.rs @@ -61,6 +61,6 @@ fn main() { for f in fns { let sz = rng.next() % 256u32 + 256u32; let frame_backoff = rng.next() % 10u32 + 1u32; - task::join(task::spawn_joinable {|| runtest(f, frame_backoff);}); + task::try {|| runtest(f, frame_backoff) }; } } \ No newline at end of file diff --git a/src/test/run-pass/send-iloop.rs b/src/test/run-pass/send-iloop.rs index 5fb4e4e9bd9..ece3dc4ce64 100644 --- a/src/test/run-pass/send-iloop.rs +++ b/src/test/run-pass/send-iloop.rs @@ -9,7 +9,6 @@ fn die() { } fn iloop() { - task::unsupervise(); task::spawn {|| die(); }; let p = comm::port::<()>(); let c = comm::chan(p); @@ -23,6 +22,8 @@ fn iloop() { fn main() { uint::range(0u, 16u) {|_i| - task::spawn {|| iloop(); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| iloop(); } } } \ No newline at end of file diff --git a/src/test/run-pass/spawn-module-qualified.rs b/src/test/run-pass/spawn-module-qualified.rs deleted file mode 100644 index cbc3b8b2ea6..00000000000 --- a/src/test/run-pass/spawn-module-qualified.rs +++ /dev/null @@ -1,9 +0,0 @@ -use std; -import task::join; -import task::spawn_joinable; - -fn main() { let x = spawn_joinable {|| m::child(10); }; join(x); } - -mod m { - fn child(&&i: int) { log(debug, i); } -} diff --git a/src/test/run-pass/spawn.rs b/src/test/run-pass/spawn.rs index 7a395f677aa..600cbdb06b8 100644 --- a/src/test/run-pass/spawn.rs +++ b/src/test/run-pass/spawn.rs @@ -5,8 +5,7 @@ use std; import task; fn main() { - let t = task::spawn_joinable {|| child(10); }; - task::join(t); + task::spawn {|| child(10); }; } fn child(&&i: int) { log(error, i); assert (i == 10); } diff --git a/src/test/run-pass/task-comm-1.rs b/src/test/run-pass/task-comm-1.rs index 96901b9ae56..713d487f3d8 100644 --- a/src/test/run-pass/task-comm-1.rs +++ b/src/test/run-pass/task-comm-1.rs @@ -1,14 +1,8 @@ -use std; - -import task::spawn_joinable; -import task::join; - fn main() { test00(); } fn start() { #debug("Started / Finished task."); } fn test00() { - let t = spawn_joinable {|| start(); }; - join(t); + task::try {|| start() }; #debug("Completing."); } diff --git a/src/test/run-pass/task-comm-12.rs b/src/test/run-pass/task-comm-12.rs index beaa93c02e0..4e690a034ce 100644 --- a/src/test/run-pass/task-comm-12.rs +++ b/src/test/run-pass/task-comm-12.rs @@ -7,7 +7,9 @@ fn start(&&task_number: int) { #debug("Started / Finished task."); } fn test00() { let i: int = 0; - let t = task::spawn_joinable {|| start(i); }; + let builder = task::mk_task_builder(); + let r = task::future_result(builder); + task::run(builder) {|| start(i); }; // Sleep long enough for the task to finish. let i = 0; @@ -17,7 +19,7 @@ fn test00() { } // Try joining tasks that have already finished. - task::join(t); + future::get(r); #debug("Joined task."); } diff --git a/src/test/run-pass/task-comm-13.rs b/src/test/run-pass/task-comm-13.rs index dc2393d13f4..5998dd15cf2 100644 --- a/src/test/run-pass/task-comm-13.rs +++ b/src/test/run-pass/task-comm-13.rs @@ -12,7 +12,6 @@ fn main() { #debug("Check that we don't deadlock."); let p = comm::port::<int>(); let ch = comm::chan(p); - let a = task::spawn_joinable {|| start(ch, 0, 10); }; - task::join(a); + task::try {|| start(ch, 0, 10) }; #debug("Joined task"); } diff --git a/src/test/run-pass/task-comm-2.rs b/src/test/run-pass/task-comm-2.rs deleted file mode 100644 index c17b1c8a11e..00000000000 --- a/src/test/run-pass/task-comm-2.rs +++ /dev/null @@ -1,31 +0,0 @@ -// xfail-win32 -use std; - -import task; - -fn main() { - #debug("===== SPAWNING and JOINING THREAD TASKS ====="); - test00(); -} - -fn start(&&task_number: int) { - #debug("Started task."); - let i: int = 0; - while i < 10000 { i = i + 1; } - #debug("Finished task."); -} - -fn test00() { - let number_of_tasks: int = 8; - - let i: int = 0; - let tasks = []; - while i < number_of_tasks { - i = i + 1; - tasks += [task::spawn_joinable {|| start(i); }]; - } - - for t in tasks { task::join(t); } - - #debug("Joined all task."); -} diff --git a/src/test/run-pass/task-comm-3.rs b/src/test/run-pass/task-comm-3.rs index d5826309356..bb1044d39e3 100644 --- a/src/test/run-pass/task-comm-3.rs +++ b/src/test/run-pass/task-comm-3.rs @@ -30,17 +30,19 @@ fn test00() { let i: int = 0; // Create and spawn tasks... - let tasks = []; + let results = []; while i < number_of_tasks { - tasks += [task::spawn_joinable {|| + let builder = task::mk_task_builder(); + results += [task::future_result(builder)]; + task::run(builder) {|| test00_start(ch, i, number_of_messages) - }]; + } i = i + 1; } // Read from spawned tasks... let sum = 0; - for t in tasks { + for r in results { i = 0; while i < number_of_messages { let value = recv(po); @@ -50,7 +52,7 @@ fn test00() { } // Join spawned tasks... - for t in tasks { task::join(t); } + for r in results { future::get(r); } #debug("Completed: Final number is: "); log(error, sum); diff --git a/src/test/run-pass/task-comm-7.rs b/src/test/run-pass/task-comm-7.rs index c7c15830955..64649b85459 100644 --- a/src/test/run-pass/task-comm-7.rs +++ b/src/test/run-pass/task-comm-7.rs @@ -1,9 +1,6 @@ use std; import task; import comm; -import comm::chan; -import comm::recv; -import comm::port; fn main() { test00(); } @@ -15,40 +12,35 @@ fn test00_start(c: comm::chan<int>, start: int, number_of_messages: int) { fn test00() { let r: int = 0; let sum: int = 0; - let p = port(); + let p = comm::port(); let number_of_messages: int = 10; - let c = chan(p); + let c = comm::chan(p); - let t0 = task::spawn_joinable {|| + task::spawn {|| test00_start(c, number_of_messages * 0, number_of_messages); - }; - let t1 = task::spawn_joinable {|| + } + task::spawn {|| test00_start(c, number_of_messages * 1, number_of_messages); - }; - let t2 = task::spawn_joinable {|| + } + task::spawn {|| test00_start(c, number_of_messages * 2, number_of_messages); - }; - let t3 = task::spawn_joinable {|| + } + task::spawn {|| test00_start(c, number_of_messages * 3, number_of_messages); - }; + } let i: int = 0; while i < number_of_messages { - r = recv(p); + r = comm::recv(p); sum += r; - r = recv(p); + r = comm::recv(p); sum += r; - r = recv(p); + r = comm::recv(p); sum += r; - r = recv(p); + r = comm::recv(p); sum += r; i += 1; } - task::join(t0); - task::join(t1); - task::join(t2); - task::join(t3); - assert (sum == number_of_messages * 4 * (number_of_messages * 4 - 1) / 2); } diff --git a/src/test/run-pass/task-comm-8.rs b/src/test/run-pass/task-comm-8.rs deleted file mode 100644 index 8259fde9fad..00000000000 --- a/src/test/run-pass/task-comm-8.rs +++ /dev/null @@ -1,51 +0,0 @@ -use std; -import task; -import comm; - -fn main() { test00(); } - -fn test00_start(c: comm::chan<int>, start: int, number_of_messages: int) { - let i: int = 0; - while i < number_of_messages { comm::send(c, start + i); i += 1; } -} - -fn test00() { - let r: int = 0; - let sum: int = 0; - let p = comm::port(); - let c = comm::chan(p); - let number_of_messages: int = 10; - - let t0 = task::spawn_joinable {|| - test00_start(c, number_of_messages * 0, number_of_messages); - }; - let t1 = task::spawn_joinable {|| - test00_start(c, number_of_messages * 1, number_of_messages); - }; - let t2 = task::spawn_joinable {|| - test00_start(c, number_of_messages * 2, number_of_messages); - }; - let t3 = task::spawn_joinable {|| - test00_start(c, number_of_messages * 3, number_of_messages); - }; - - let i: int = 0; - while i < number_of_messages { - r = comm::recv(p); - sum += r; - r = comm::recv(p); - sum += r; - r = comm::recv(p); - sum += r; - r = comm::recv(p); - sum += r; - i += 1; - } - - task::join(t0); - task::join(t1); - task::join(t2); - task::join(t3); - - assert (sum == number_of_messages * 4 * (number_of_messages * 4 - 1) / 2); -} diff --git a/src/test/run-pass/task-comm-9.rs b/src/test/run-pass/task-comm-9.rs index f6cc1dae6f0..85d1e03c09c 100644 --- a/src/test/run-pass/task-comm-9.rs +++ b/src/test/run-pass/task-comm-9.rs @@ -16,9 +16,11 @@ fn test00() { let number_of_messages: int = 10; let ch = comm::chan(p); - let t0 = task::spawn_joinable {|| + let builder = task::mk_task_builder(); + let r = task::future_result(builder); + task::run(builder) {|| test00_start(ch, number_of_messages); - }; + } let i: int = 0; while i < number_of_messages { @@ -27,7 +29,7 @@ fn test00() { i += 1; } - task::join(t0); + future::get(r); assert (sum == number_of_messages * (number_of_messages - 1) / 2); } diff --git a/src/test/run-pass/task-comm.rs b/src/test/run-pass/task-comm.rs index f029dcd61a2..d710b50e2b0 100644 --- a/src/test/run-pass/task-comm.rs +++ b/src/test/run-pass/task-comm.rs @@ -38,20 +38,20 @@ fn test00() { let i: int = 0; - let tasks = []; + let results = []; while i < number_of_tasks { i = i + 1; - tasks += [ - task::spawn_joinable {|| test00_start(ch, i, number_of_messages);} - ]; + let builder = task::mk_task_builder(); + results += [task::future_result(builder)]; + task::run(builder) {|| test00_start(ch, i, number_of_messages);} } let sum: int = 0; - for t in tasks { + for r in results { i = 0; while i < number_of_messages { sum += recv(po); i = i + 1; } } - for t in tasks { task::join(t); } + for r in results { future::get(r); } #debug("Completed: Final number is: "); assert (sum == @@ -123,14 +123,16 @@ fn test06() { let i: int = 0; - let tasks = []; + let results = []; while i < number_of_tasks { i = i + 1; - tasks += [task::spawn_joinable {|| test06_start(i);}]; + let builder = task::mk_task_builder(); + results += [task::future_result(builder)]; + task::run(builder) {|| test06_start(i);}; } - for t in tasks { task::join(t); } + for r in results { future::get(r); } } diff --git a/src/test/run-pass/task-killjoin.rs b/src/test/run-pass/task-killjoin.rs index 313d9bd3702..872639bc8e7 100644 --- a/src/test/run-pass/task-killjoin.rs +++ b/src/test/run-pass/task-killjoin.rs @@ -1,18 +1,17 @@ // xfail-win32 -// Create a task that is supervised by another task, -// join the supervised task from the supervising task, -// then fail the supervised task. The supervised task -// will kill the supervising task, waking it up. The -// supervising task no longer needs to be wakened when -// the supervised task exits. + +// Create a task that is supervised by another task, join the supervised task +// from the supervising task, then fail the supervised task. The supervised +// task will kill the supervising task, waking it up. The supervising task no +// longer needs to be wakened when the supervised task exits. use std; import task; fn supervised() { - // Yield to make sure the supervisor joins before we - // fail. This is currently not needed because the supervisor - // runs first, but I can imagine that changing. + // Yield to make sure the supervisor joins before we fail. This is + // currently not needed because the supervisor runs first, but I can + // imagine that changing. task::yield(); fail; } @@ -20,15 +19,14 @@ fn supervised() { fn supervisor() { // Unsupervise this task so the process doesn't return a failure status as // a result of the main task being killed. - task::unsupervise(); let f = supervised; - let t = task::spawn_joinable {|| supervised(); }; - task::join(t); + task::try {|| supervised() }; } fn main() { - let dom2 = task::spawn_joinable {|| supervisor(); }; - task::join(dom2); + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| supervisor(); } } // Local Variables: diff --git a/src/test/run-pass/task-spawn-connected.rs b/src/test/run-pass/task-spawn-connected.rs deleted file mode 100644 index 053dab56a05..00000000000 --- a/src/test/run-pass/task-spawn-connected.rs +++ /dev/null @@ -1,18 +0,0 @@ -fn stringifier(from_par: comm::port<uint>, - to_par: comm::chan<str>) { - let value: uint; - do { - value = comm::recv(from_par); - comm::send(to_par, uint::to_str(value, 10u)); - } while value != 0u; -} - -fn main() { - let t = task::spawn_connected(stringifier); - comm::send(t.to_child, 22u); - assert comm::recv(t.from_child) == "22"; - comm::send(t.to_child, 23u); - assert comm::recv(t.from_child) == "23"; - comm::send(t.to_child, 0u); - assert comm::recv(t.from_child) == "0"; -} \ No newline at end of file diff --git a/src/test/run-pass/terminate-in-initializer.rs b/src/test/run-pass/terminate-in-initializer.rs index 23597b3ed62..9b722a947c0 100644 --- a/src/test/run-pass/terminate-in-initializer.rs +++ b/src/test/run-pass/terminate-in-initializer.rs @@ -11,14 +11,14 @@ fn test_cont() { let i = 0; while i < 1 { i += 1; let x: @int = cont; } } fn test_ret() { let x: @int = ret; } fn test_fail() { - fn f() { task::unsupervise(); let x: @int = fail; } - task::spawn {|| f(); }; + fn f() { let x: @int = fail; } + task::try {|| f() }; } fn test_fail_indirect() { fn f() -> ! { fail; } - fn g() { task::unsupervise(); let x: @int = f(); } - task::spawn {|| g(); }; + fn g() { let x: @int = f(); } + task::try {|| g() }; } fn main() { diff --git a/src/test/run-pass/too-much-recursion.rs b/src/test/run-pass/too-much-recursion.rs index 03d537d0ca6..04119e296cf 100644 --- a/src/test/run-pass/too-much-recursion.rs +++ b/src/test/run-pass/too-much-recursion.rs @@ -5,8 +5,9 @@ // that it doesn't bring down the whole proc fn main() { - task::spawn {|| - task::unsupervise(); + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| fn f() { f() }; f(); }; diff --git a/src/test/run-pass/unwind-box.rs b/src/test/run-pass/unwind-box.rs index ca4221e0763..5281ddb05c7 100644 --- a/src/test/run-pass/unwind-box.rs +++ b/src/test/run-pass/unwind-box.rs @@ -3,11 +3,12 @@ use std; import task; fn f() { - task::unsupervise(); let a = @0; fail; } fn main() { - task::spawn {|| f(); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| f(); } } \ No newline at end of file diff --git a/src/test/run-pass/unwind-resource.rs b/src/test/run-pass/unwind-resource.rs index 5bb70236b7c..0c64af20b40 100644 --- a/src/test/run-pass/unwind-resource.rs +++ b/src/test/run-pass/unwind-resource.rs @@ -8,7 +8,6 @@ resource complainer(c: comm::chan<bool>) { } fn f(c: comm::chan<bool>) { - task::unsupervise(); let c <- complainer(c); fail; } @@ -16,6 +15,8 @@ fn f(c: comm::chan<bool>) { fn main() { let p = comm::port(); let c = comm::chan(p); - task::spawn {|| f(c); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| f(c); } assert comm::recv(p); } \ No newline at end of file diff --git a/src/test/run-pass/unwind-resource2.rs b/src/test/run-pass/unwind-resource2.rs index dbf91f31a3f..b4d2294fbfe 100644 --- a/src/test/run-pass/unwind-resource2.rs +++ b/src/test/run-pass/unwind-resource2.rs @@ -7,11 +7,12 @@ resource complainer(c: @int) { } fn f() { - task::unsupervise(); let c <- complainer(@0); fail; } fn main() { - task::spawn {|| f(); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| f(); } } \ No newline at end of file diff --git a/src/test/run-pass/unwind-unique.rs b/src/test/run-pass/unwind-unique.rs index 9fab3c54609..222343e1dc4 100644 --- a/src/test/run-pass/unwind-unique.rs +++ b/src/test/run-pass/unwind-unique.rs @@ -3,11 +3,12 @@ use std; import task; fn f() { - task::unsupervise(); let a = ~0; fail; } fn main() { - task::spawn {|| f(); }; + let builder = task::mk_task_builder(); + task::unsupervise(builder); + task::run(builder) {|| f(); } } \ No newline at end of file diff --git a/src/test/run-pass/yield.rs b/src/test/run-pass/yield.rs index eb4a74c141a..3194676aae7 100644 --- a/src/test/run-pass/yield.rs +++ b/src/test/run-pass/yield.rs @@ -4,13 +4,15 @@ import task; import task::*; fn main() { - let other = task::spawn_joinable {|| child(); }; + let builder = task::mk_task_builder(); + let result = task::future_result(builder); + task::run(builder) {|| child(); } #error("1"); yield(); #error("2"); yield(); #error("3"); - join(other); + future::get(result); } fn child() { diff --git a/src/test/run-pass/yield1.rs b/src/test/run-pass/yield1.rs index a5234cf8d12..c309e5b1b0c 100644 --- a/src/test/run-pass/yield1.rs +++ b/src/test/run-pass/yield1.rs @@ -4,10 +4,12 @@ import task; import task::*; fn main() { - let other = task::spawn_joinable {|| child(); }; + let builder = task::mk_task_builder(); + let result = task::future_result(builder); + task::run(builder) {|| child(); } #error("1"); yield(); - join(other); + future::get(result); } fn child() { #error("2"); } |
