From b5044de0858b8a3fd2a750cb3ddafb525a06fed3 Mon Sep 17 00:00:00 2001 From: "sashakoshka@tebibyte.media" Date: Sat, 25 Jan 2025 19:52:59 -0500 Subject: [PATCH] sync: Test Gate --- sync/gate_test.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sync/gate_test.go diff --git a/sync/gate_test.go b/sync/gate_test.go new file mode 100644 index 0000000..da41a73 --- /dev/null +++ b/sync/gate_test.go @@ -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") + } +}