v/vlib/v/tests/lock_selector_test.v

51 lines
524 B
V

struct St {
mut:
x f64
}
fn (s &St) get_f64() f64 {
return s.x
}
struct Gen {
s shared St
}
fn (g Gen) set_val() bool {
lock g.s {
g.s.x = 6.25
if g.s.x == 6.25 {
return true
}
g.s.x == 7.125
}
return false
}
fn (g &Gen) inc_val() {
shared q := St{
x: 1.0
}
shared v := St{
x: 0.25
}
lock q, g.s, v {
g.s.x += q.x
g.s.x += v.x
}
}
fn test_lock_selector_expression() {
g := Gen{
s: St{
x: 12.5
}
}
g.set_val()
g.inc_val()
a := rlock g.s {
g.s.get_f64()
}
assert a == 7.5
}