]> git.lizzy.rs Git - rust.git/blob - src/test/ui/threads-sendsync/send-is-not-static-par-for.rs
Merge commit 'e18101137866b79045fee0ef996e696e68c920b4' into clippyup
[rust.git] / src / test / ui / threads-sendsync / send-is-not-static-par-for.rs
1 // run-pass
2 #![allow(unused_imports)]
3 use std::thread;
4 use std::sync::Mutex;
5
6 fn par_for<I, F>(iter: I, f: F)
7     where I: Iterator,
8           I::Item: Send,
9           F: Fn(I::Item) + Sync
10 {
11     for item in iter {
12         f(item)
13     }
14 }
15
16 fn sum(x: &[i32]) {
17     let sum_lengths = Mutex::new(0);
18     par_for(x.windows(4), |x| {
19         *sum_lengths.lock().unwrap() += x.len()
20     });
21
22     assert_eq!(*sum_lengths.lock().unwrap(), (x.len() - 3) * 4);
23 }
24
25 fn main() {
26     let mut elements = [0; 20];
27
28     // iterators over references into this stack frame
29     par_for(elements.iter_mut().enumerate(), |(i, x)| {
30         *x = i as i32
31     });
32
33     sum(&elements)
34 }