v2 / vlib / v / tests / concurrency / lock_selector_test.v
50 lines · 45 sloc · 525 bytes · e97036a25b09e144d5419d1e538e9b5444e7bcc1
Raw
1struct St {
2mut:
3 x f64
4}
5
6fn (s &St) get_f64() f64 {
7 return s.x
8}
9
10struct Gen {
11 s shared St
12}
13
14fn (g &Gen) set_val() bool {
15 lock g.s {
16 g.s.x = 6.25
17 if g.s.x == 6.25 {
18 return true
19 }
20 g.s.x == 7.125
21 }
22 return false
23}
24
25fn (g &Gen) inc_val() {
26 shared q := St{
27 x: 1.0
28 }
29 shared v := St{
30 x: 0.25
31 }
32 lock q, g.s, v {
33 g.s.x += q.x
34 g.s.x += v.x
35 }
36}
37
38fn test_lock_selector_expression() {
39 g := Gen{
40 s: St{
41 x: 12.5
42 }
43 }
44 g.set_val()
45 g.inc_val()
46 a := rlock g.s {
47 g.s.get_f64()
48 }
49 assert a == 7.5
50}
51