Initial project import

This commit is contained in:
Agila Forge Importer committed 2026-07-13 15:20:32 +00:00
commit 23f2d29e32
11957 files changed
+1754577

No files matched your search

+95
View File
@@ -0,0 +1,95 @@
// vtest retry: 3
// vtest flaky: true
module sync
import time
import sync.stdatomic
fn issue_6870_worker(mut wg WaitGroup, ready chan bool, release chan bool) {
ready <- true
_ = <-release
wg.add(1)
wg.done()
wg.done()
}
fn test_waitgroup_reuse() {
mut wg := new_waitgroup()
wg.add(1)
wg.done()
wg.add(1)
mut executed := false
spawn fn (mut wg WaitGroup, executed voidptr) {
defer {
wg.done()
}
unsafe {
*(&bool(executed)) = true
}
time.sleep(100 * time.millisecond)
}(mut wg, voidptr(&executed))
wg.wait()
assert executed
}
fn test_waitgroup_no_use() {
done := chan bool{cap: 1}
watchdog := spawn fn (done chan bool) {
select {
_ := <-done {}
10 * time.second {
panic('test_waitgroup_no_use did not complete in time')
}
}
}(done)
mut wg := new_waitgroup()
wg.wait()
done <- true
watchdog.wait()
}
fn test_waitgroup_go() {
mut counter := stdatomic.new_atomic(0)
mut wg := new_waitgroup()
for i in 0 .. 10 {
wg.go(fn [mut counter] () {
counter.add(1)
})
}
wg.wait()
assert counter.load() == 10
}
fn test_waitgroup_add_while_waiting() {
for _ in 0 .. 50 {
mut wg := new_waitgroup()
ready := chan bool{cap: 1}
release := chan bool{cap: 1}
wait_done := chan bool{cap: 8}
wg.add(1)
spawn issue_6870_worker(mut wg, ready, release)
_ = <-ready
for _ in 0 .. 8 {
spawn fn [mut wg, wait_done] () {
wg.wait()
wait_done <- true
}()
}
release <- true
for _ in 0 .. 8 {
select {
_ := <-wait_done {}
2 * time.second {
assert false, 'wait() missed a wakeup while work added more tasks'
}
}
}
}
}