v/vlib/sync/channel_array_mut_test.v

41 lines
665 B
V
Raw Normal View History

import sync
const (
num_iterations = 10000
)
struct St {
mut:
dummy i64
dummy2 u32
dummy3 i64
n int
dummy4 int
}
// this function gets an array of channels for `St` references
fn do_rec_calc_send(chs []chan mut St) {
mut s := &St(0)
for {
if !(&sync.Channel(chs[0])).pop(&s) {
break
}
s.n++
(&sync.Channel(chs[1])).push(&s)
}
}
fn test_channel_array_mut() {
mut chs := [chan mut St{cap: 1}, chan mut St{}]
go do_rec_calc_send(chs)
mut t := &St{
n: 100
}
for _ in 0 .. num_iterations {
(&sync.Channel(chs[0])).push(&t)
(&sync.Channel(chs[1])).pop(&t)
}
(&sync.Channel(chs[0])).close()
assert t.n == 100 + num_iterations
}