|  | //@ run-pass | 
|  | #![allow(unused_must_use)] | 
|  | //@ needs-threads | 
|  |  | 
|  | use std::sync::mpsc::{channel, Sender}; | 
|  | use std::thread; | 
|  |  | 
|  | pub fn main() { | 
|  | println!("===== WITHOUT THREADS ====="); | 
|  | test00(); | 
|  | } | 
|  |  | 
|  | fn test00_start(ch: &Sender<isize>, message: isize, count: isize) { | 
|  | println!("Starting test00_start"); | 
|  | let mut i: isize = 0; | 
|  | while i < count { | 
|  | println!("Sending Message"); | 
|  | ch.send(message + 0).unwrap(); | 
|  | i = i + 1; | 
|  | } | 
|  | println!("Ending test00_start"); | 
|  | } | 
|  |  | 
|  | fn test00() { | 
|  | let number_of_tasks: isize = 16; | 
|  | let number_of_messages: isize = 4; | 
|  |  | 
|  | println!("Creating tasks"); | 
|  |  | 
|  | let (tx, rx) = channel(); | 
|  |  | 
|  | let mut i: isize = 0; | 
|  |  | 
|  | // Create and spawn threads... | 
|  | let mut results = Vec::new(); | 
|  | while i < number_of_tasks { | 
|  | let tx = tx.clone(); | 
|  | results.push(thread::spawn({ | 
|  | let i = i; | 
|  | move || test00_start(&tx, i, number_of_messages) | 
|  | })); | 
|  | i = i + 1; | 
|  | } | 
|  |  | 
|  | // Read from spawned threads... | 
|  | let mut sum = 0; | 
|  | for _r in &results { | 
|  | i = 0; | 
|  | while i < number_of_messages { | 
|  | let value = rx.recv().unwrap(); | 
|  | sum += value; | 
|  | i = i + 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | // Join spawned threads... | 
|  | for r in results { | 
|  | r.join(); | 
|  | } | 
|  |  | 
|  | println!("Completed: Final number is: "); | 
|  | println!("{}", sum); | 
|  | // assert (sum == (((number_of_threads * (number_of_threads - 1)) / 2) * | 
|  | //       number_of_messages)); | 
|  | assert_eq!(sum, 480); | 
|  | } |