sync: Test Gate
This commit is contained in:
parent
597e3189ca
commit
b5044de085
52
sync/gate_test.go
Normal file
52
sync/gate_test.go
Normal file
@ -0,0 +1,52 @@
|
||||
package usync
|
||||
|
||||
import "time"
|
||||
import "testing"
|
||||
|
||||
func TestGate(test *testing.T) {
|
||||
gate := NewGate[int]()
|
||||
go func() {
|
||||
for number := range 21 {
|
||||
test.Log("send", number)
|
||||
gate.Send(number)
|
||||
}
|
||||
test.Log("send done")
|
||||
}()
|
||||
for correct := range 21 {
|
||||
got := <- gate.Receive()
|
||||
test.Log("RECV", correct, got)
|
||||
if correct != got {
|
||||
test.Fatal("RECV not equal")
|
||||
}
|
||||
}
|
||||
test.Log("RECV done")
|
||||
}
|
||||
|
||||
func TestGateCloseEarly(test *testing.T) {
|
||||
gate := NewGate[int]()
|
||||
sendDone := make(chan struct { })
|
||||
go func() {
|
||||
for number := range 21 {
|
||||
test.Log("send", number)
|
||||
gate.Send(number)
|
||||
}
|
||||
test.Log("send done")
|
||||
close(sendDone)
|
||||
}()
|
||||
for correct := range 15 {
|
||||
got := <- gate.Receive()
|
||||
test.Log("RECV", correct, got)
|
||||
if correct != got {
|
||||
test.Fatal("RECV not equal")
|
||||
}
|
||||
}
|
||||
test.Log("RECV done, closing gate... DOOR STUCK!! PLS I BEG OF YOU!!")
|
||||
gate.Close()
|
||||
test.Log("RECV closed gate yay :)))")
|
||||
timeout := time.NewTimer(time.Second * 4)
|
||||
select {
|
||||
case <- sendDone:
|
||||
case <- timeout.C:
|
||||
test.Fatal("timed out waiting for sender goroutine to stop")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user