v / vlib / sync
Raw file | 32 loc (30 sloc) | 552 bytes | Latest commit hash e81e0ac70
1fn do_rec(ch chan int, resch chan i64) {
2 mut sum := i64(0)
3 for _ in 0 .. 2000 {
4 sum += <-ch
5 }
6 println(sum)
7 resch <- sum
8}
9
10fn do_send(ch chan int) {
11 for i in 0 .. 2000 {
12 ch <- i
13 }
14}
15
16fn test_channel_multi_unbuffered() {
17 ch := chan int{}
18 resch := chan i64{}
19 spawn do_rec(ch, resch)
20 spawn do_rec(ch, resch)
21 spawn do_rec(ch, resch)
22 spawn do_rec(ch, resch)
23 spawn do_send(ch)
24 spawn do_send(ch)
25 spawn do_send(ch)
26 spawn do_send(ch)
27 mut sum := i64(0)
28 for _ in 0 .. 4 {
29 sum += <-resch
30 }
31 assert sum == i64(4) * 2000 * (2000 - 1) / 2
32}