v2 / vlib / v / tests / concurrency / shared_arg_test.v
94 lines · 85 sloc · 1.07 KB · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct St {
2mut:
3 a int
4}
5
6struct Qr {
7mut:
8 a int
9}
10
11fn (mut r Qr) s_mut(mut s St) {
12 r.a = 5
13 s.a = 7
14}
15
16fn (r Qr) s_val(s St) int {
17 return r.a * s.a
18}
19
20fn m_mut(mut a map[string]f64) {
21 a['yxcv'] = -2.25
22}
23
24fn m_val(a map[string]f64) f64 {
25 x := a['yxcv']
26 return x
27}
28
29fn a_mut(mut a []int) {
30 a[2] = 42
31}
32
33fn a_val(a []int) int {
34 return a[1]
35}
36
37fn test_shared_as_value() {
38 shared s := St{
39 a: 5
40 }
41 shared a := [3, 4, 6, 13, -23]
42 shared m := {
43 'qw': 12.75
44 'yxcv': -3.125
45 'poiu': 88.0625
46 }
47 shared r := Qr{
48 a: 7
49 }
50 rlock s, r {
51 u := r.s_val(s)
52 assert u == 35
53 }
54 lock s, r {
55 v := r.s_val(s)
56 assert v == 35
57 }
58 rlock m {
59 u := m_val(m)
60 assert u == -3.125
61 }
62 lock a {
63 u := a_val(a)
64 assert u == 4
65 }
66}
67
68fn test_shared_as_mut() {
69 shared s := St{
70 a: 5
71 }
72 shared a := [3, 4, 6, 13, -23]
73 shared m := {
74 'qw': 12.75
75 'yxcv': -3.125
76 'poiu': 88.0625
77 }
78 shared r := Qr{
79 a: 7
80 }
81 lock s, r {
82 r.s_mut(mut s)
83 x := r.a * s.a
84 assert x == 35
85 }
86 lock a, m {
87 m_mut(mut m)
88 a_mut(mut a)
89 y := m['yxcv']
90 z := a[2]
91 assert y == -2.25
92 assert z == 42
93 }
94}
95