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