1 | fn 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 | |
10 | fn do_send(ch chan int) { |
11 | for i in 0 .. 2000 { |
12 | ch <- i |
13 | } |
14 | } |
15 | |
16 | fn test_channel_multi_buffered() { |
17 | ch := chan int{cap: 100} |
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 | } |