95 lines
1.1 KiB
V
95 lines
1.1 KiB
V
struct St {
|
|
mut:
|
|
a int
|
|
}
|
|
|
|
struct Qr {
|
|
mut:
|
|
a int
|
|
}
|
|
|
|
fn (mut r Qr) s_mut(mut s St) {
|
|
r.a = 5
|
|
s.a = 7
|
|
}
|
|
|
|
fn (r Qr) s_val(s St) int {
|
|
return r.a * s.a
|
|
}
|
|
|
|
fn m_mut(mut a map[string]f64) {
|
|
a['yxcv'] = -2.25
|
|
}
|
|
|
|
fn m_val(a map[string]f64) f64 {
|
|
x := a['yxcv']
|
|
return x
|
|
}
|
|
|
|
fn a_mut(mut a []int) {
|
|
a[2] = 42
|
|
}
|
|
|
|
fn a_val(a []int) int {
|
|
return a[1]
|
|
}
|
|
|
|
fn test_shared_as_value() {
|
|
shared s := St{
|
|
a: 5
|
|
}
|
|
shared a := [3, 4, 6, 13, -23]
|
|
shared m := map{
|
|
'qw': 12.75
|
|
'yxcv': -3.125
|
|
'poiu': 88.0625
|
|
}
|
|
shared r := Qr{
|
|
a: 7
|
|
}
|
|
rlock s, r {
|
|
u := r.s_val(s)
|
|
assert u == 35
|
|
}
|
|
lock s, r {
|
|
v := r.s_val(s)
|
|
assert v == 35
|
|
}
|
|
rlock m {
|
|
u := m_val(m)
|
|
assert u == -3.125
|
|
}
|
|
lock a {
|
|
u := a_val(a)
|
|
assert u == 4
|
|
}
|
|
}
|
|
|
|
fn test_shared_as_mut() {
|
|
shared s := St{
|
|
a: 5
|
|
}
|
|
shared a := [3, 4, 6, 13, -23]
|
|
shared m := map{
|
|
'qw': 12.75
|
|
'yxcv': -3.125
|
|
'poiu': 88.0625
|
|
}
|
|
shared r := Qr{
|
|
a: 7
|
|
}
|
|
lock s, r {
|
|
r.s_mut(mut s)
|
|
x := r.a * s.a
|
|
assert x == 35
|
|
}
|
|
lock a, m {
|
|
m_mut(mut m)
|
|
a_mut(mut a)
|
|
y := m['yxcv']
|
|
z := a[2]
|
|
assert y == -2.25
|
|
assert z == 42
|
|
}
|
|
}
|