2020-08-14 21:18:42 +02:00
|
|
|
import sync
|
|
|
|
|
|
|
|
const (
|
|
|
|
num_iterations = 10000
|
|
|
|
)
|
|
|
|
|
|
|
|
struct St {
|
|
|
|
mut:
|
2020-08-16 23:01:49 +02:00
|
|
|
dummy i64
|
|
|
|
dummy2 u32
|
|
|
|
dummy3 i64
|
|
|
|
n int
|
|
|
|
dummy4 int
|
2020-08-14 21:18:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// this function gets an array of channels for `St` references
|
|
|
|
fn do_rec_calc_send(chs []chan mut St) {
|
|
|
|
for {
|
2020-08-23 02:12:05 +02:00
|
|
|
mut s := <-chs[0] or {
|
2020-08-14 21:18:42 +02:00
|
|
|
break
|
|
|
|
}
|
|
|
|
s.n++
|
2020-08-23 02:12:05 +02:00
|
|
|
chs[1] <- s
|
2020-08-14 21:18:42 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn test_channel_array_mut() {
|
|
|
|
mut chs := [chan mut St{cap: 1}, chan mut St{}]
|
|
|
|
go do_rec_calc_send(chs)
|
2020-08-16 23:01:49 +02:00
|
|
|
mut t := &St{
|
2020-08-14 21:18:42 +02:00
|
|
|
n: 100
|
|
|
|
}
|
|
|
|
for _ in 0 .. num_iterations {
|
2020-08-23 02:12:05 +02:00
|
|
|
chs[0] <- t
|
|
|
|
t = <-chs[1]
|
2020-08-14 21:18:42 +02:00
|
|
|
}
|
|
|
|
(&sync.Channel(chs[0])).close()
|
|
|
|
assert t.n == 100 + num_iterations
|
|
|
|
}
|