49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package channels
|
|
|
|
import "testing"
|
|
|
|
func TestOverflowingChannel(t *testing.T) {
|
|
var ch Channel
|
|
|
|
ch = NewOverflowingChannel(Infinity) // yes this is rather silly, but it should work
|
|
testChannel(t, "infinite overflowing channel", ch)
|
|
|
|
ch = NewOverflowingChannel(None)
|
|
go func() {
|
|
for i := 0; i < 1000; i++ {
|
|
ch.In() <- i
|
|
}
|
|
ch.Close()
|
|
}()
|
|
prev := -1
|
|
for i := range ch.Out() {
|
|
if prev >= i.(int) {
|
|
t.Fatal("overflowing channel prev", prev, "but got", i.(int))
|
|
}
|
|
}
|
|
|
|
ch = NewOverflowingChannel(10)
|
|
for i := 0; i < 1000; i++ {
|
|
ch.In() <- i
|
|
}
|
|
ch.Close()
|
|
for i := 0; i < 10; i++ {
|
|
val := <-ch.Out()
|
|
if i != val.(int) {
|
|
t.Fatal("overflowing channel expected", i, "but got", val.(int))
|
|
}
|
|
}
|
|
if val, open := <-ch.Out(); open == true {
|
|
t.Fatal("overflowing channel expected closed but got", val)
|
|
}
|
|
|
|
ch = NewOverflowingChannel(None)
|
|
ch.In() <- 0
|
|
ch.Close()
|
|
if val, open := <-ch.Out(); open == true {
|
|
t.Fatal("overflowing channel expected closed but got", val)
|
|
}
|
|
|
|
ch = NewOverflowingChannel(2)
|
|
testChannelConcurrentAccessors(t, "overflowing channel", ch)
|
|
}
|