pull/14014/head
crthpl 2022-04-11 14:57:55 -07:00
parent 0a9410160e
commit 510e095e8f
No known key found for this signature in database
GPG Key ID: B8BBDB4002CB6F74
1 changed files with 30 additions and 38 deletions

View File

@ -1,4 +1,3 @@
// vtest retry: 3
import time
struct AA {
@ -6,49 +5,42 @@ mut:
b string
}
const (
run_time = time.millisecond * 200 // must be big enough to ensure threads have started
sleep_time = time.millisecond * 250 // some tolerance added
)
fn test_return_lock() {
start := time.now()
shared s := AA{'3'}
go printer(shared s, start)
go fn (shared s AA, start time.Time) {
for {
reader(shared s)
if time.now() - start > run_time {
exit(0)
}
}
}(shared s, start)
time.sleep(sleep_time)
assert false
}
fn printer(shared s AA, start time.Time) {
for {
lock s {
assert s.b in ['0', '1', '2', '3', '4', '5']
}
if time.now() - start > run_time {
exit(0)
assert s.b == '5'
s.b = '4'
}
rlock s {
assert s.b == '4'
}
}
fn reader(shared s AA) {
mut i := 0
for {
i++
x := i.str()
lock s {
s.b = x
if s.b == '5' {
assert s.b == '3'
s.b = '5'
// this test checks if cgen unlocks the mutex here
return
}
}
}
fn test_multi_return_lock() {
shared s := AA{'3'}
reti, retb := printer2(shared s)
lock s {
assert s.b == '3'
assert reti == 4
assert retb == true
}
}
fn printer2(shared s AA) (int, bool) {
rlock s {
assert s.b == '3'
return 4, true
}
return 5, false
}