func (t *observableTester) CloseWith(millisecond int64) {
	time.Sleep(time.Duration(millisecond) * time.Millisecond)
	close(t.sourceChannel)
}
Close is used to close the Channel with waiting time
package y3
import (
	"fmt"
	"time"
)
var (
	enabledTestPrintf = false
)
type observableTester struct {
	observe       byte
	sourceChannel chan interface{}
	source        Observable
}
func newObservableTester(observe byte) *observableTester {
	return &observableTester{observe: observe}
}
func testDecoder(observe byte, buf []byte, callback func(v []byte) (interface{}, error)) {
	newObservableTester(observe).
		Init(callback).
		Write(buf).
		CloseWith(150)
}
func (t *observableTester) Init(callback func(v []byte) (interface{}, error)) *observableTester {
	t.sourceChannel = make(chan interface{})
	subscribers := make([]chan interface{}, 0)
	t.source = &observableImpl{iterable: &iterableImpl{next: t.sourceChannel, subscribers: subscribers}}
	consumer := t.source.Subscribe(t.observe).OnObserve(callback)
	go func() {
		for c := range consumer {
			if c != 0 {
				testPrintf("TODO: Empty branch reached\n")
			}
		}
	}()
	return t
}
func (t *observableTester) Write(buf []byte) *observableTester {
	t.sourceChannel <- buf
	return t
}
func (t *observableTester) Close() {
	close(t.sourceChannel)
}