]> git.lizzy.rs Git - rust.git/blob - src/test/ui/threads-sendsync/task-comm-3.rs
Merge commit 'e18101137866b79045fee0ef996e696e68c920b4' into clippyup
[rust.git] / src / test / ui / threads-sendsync / task-comm-3.rs
1 // run-pass
2 #![allow(unused_must_use)]
3 // ignore-emscripten no threads support
4
5 use std::thread;
6 use std::sync::mpsc::{channel, Sender};
7
8 pub fn main() { println!("===== WITHOUT THREADS ====="); test00(); }
9
10 fn test00_start(ch: &Sender<isize>, message: isize, count: isize) {
11     println!("Starting test00_start");
12     let mut i: isize = 0;
13     while i < count {
14         println!("Sending Message");
15         ch.send(message + 0).unwrap();
16         i = i + 1;
17     }
18     println!("Ending test00_start");
19 }
20
21 fn test00() {
22     let number_of_tasks: isize = 16;
23     let number_of_messages: isize = 4;
24
25     println!("Creating tasks");
26
27     let (tx, rx) = channel();
28
29     let mut i: isize = 0;
30
31     // Create and spawn threads...
32     let mut results = Vec::new();
33     while i < number_of_tasks {
34         let tx = tx.clone();
35         results.push(thread::spawn({
36             let i = i;
37             move|| {
38                 test00_start(&tx, i, number_of_messages)
39             }
40         }));
41         i = i + 1;
42     }
43
44     // Read from spawned threads...
45     let mut sum = 0;
46     for _r in &results {
47         i = 0;
48         while i < number_of_messages {
49             let value = rx.recv().unwrap();
50             sum += value;
51             i = i + 1;
52         }
53     }
54
55     // Join spawned threads...
56     for r in results { r.join(); }
57
58     println!("Completed: Final number is: ");
59     println!("{}", sum);
60     // assert (sum == (((number_of_threads * (number_of_threads - 1)) / 2) *
61     //       number_of_messages));
62     assert_eq!(sum, 480);
63 }