44 lines
610 B
Go
44 lines
610 B
Go
package safeChan
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSafeChan(t *testing.T) {
|
|
ch := NewSafeChan[string](12)
|
|
|
|
// go func() {
|
|
_ = ch.Write("hello")
|
|
t.Log("write hello. 剩余数量:", ch.Size())
|
|
// }()
|
|
ch.Close()
|
|
if err := ch.Write("zzz"); err != nil {
|
|
t.Log("write zzz err.", err)
|
|
}
|
|
|
|
breakNum := 0
|
|
for {
|
|
|
|
select {
|
|
case <-ch.ctx.Done():
|
|
t.Log("done")
|
|
breakNum++
|
|
case v, ok := <-ch.Reader():
|
|
if ok {
|
|
t.Log("read", v, " 剩余数量:", ch.Size())
|
|
} else {
|
|
t.Log("break")
|
|
breakNum++
|
|
}
|
|
|
|
default:
|
|
t.Log("panic")
|
|
breakNum++
|
|
}
|
|
if breakNum > 10 {
|
|
break
|
|
}
|
|
}
|
|
|
|
}
|