v / vlib / sync
Raw file | 49 loc (42 sloc) | 774 bytes | Latest commit hash e81e0ac70
1import sync
2
3struct Counter {
4pub mut:
5 i int
6}
7
8fn (mut c Counter) add(i int) {
9 c.i = c.i + i
10}
11
12fn run(mut m sync.ManyTimes, mut co Counter, c chan bool) {
13 m.do(fn [mut co] () {
14 co.add(5)
15 })
16 c <- true
17}
18
19fn test_many_times_once() {
20 mut co := &Counter{}
21 mut m := sync.new_many_times(1)
22 c := chan bool{}
23 n := 10
24
25 // It is executed 10 times, but only once actually.
26 for i := 0; i < n; i++ {
27 spawn run(mut m, mut co, c)
28 }
29 for i := 0; i < n; i++ {
30 <-c
31 }
32 assert co.i == 5
33}
34
35fn test_many_times_fifth() {
36 mut co := &Counter{}
37 mut m := sync.new_many_times(5)
38 c := chan bool{}
39 n := 10
40
41 // It is executed 10 times, but only 5 times actually.
42 for i := 0; i < n; i++ {
43 spawn run(mut m, mut co, c)
44 }
45 for i := 0; i < n; i++ {
46 <-c
47 }
48 assert co.i == 25
49}