github.com/pharosnet/flyline@v1.0.2/array_buffer_test.go (about) 1 package flyline 2 3 import ( 4 "context" 5 "runtime" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 func TestNewArrayBuffer(t *testing.T) { 12 buf := NewArrayBuffer(4) 13 t.Logf("new buffer: %v", buf) 14 sendErr := buf.Send(time.Now()) 15 if sendErr != nil { 16 t.Errorf("send failed, %v", sendErr) 17 t.FailNow() 18 } 19 t.Logf("send ok, len = %v", buf.Len()) 20 v, ok := buf.Recv() 21 recvTime := time.Time{} 22 ValueScan(v, &recvTime) 23 t.Logf("recv: [%v:%v] %v", ok, buf.Len(), recvTime) 24 buf.Close() 25 buf.Sync(context.Background()) 26 } 27 28 func TestNewArrayBuffer_Sample(t *testing.T) { 29 runtime.GOMAXPROCS(8) 30 buf := NewArrayBuffer(8) 31 t.Logf("new buffer: %v", buf) 32 wg := new(sync.WaitGroup) 33 wg.Add(1) 34 // send 35 go func(buf Buffer, wg *sync.WaitGroup) { 36 for i := 0; i < 10000; i++ { 37 sendErr := buf.Send(time.Now()) 38 if sendErr != nil { 39 t.Errorf("send failed, %v", sendErr) 40 t.FailNow() 41 } 42 t.Logf("send ok, len = %v", buf.Len()) 43 } 44 buf.Close() 45 t.Logf("buf closed.") 46 buf.Sync(context.Background()) 47 t.Logf("buf sync.") 48 wg.Done() 49 }(buf, wg) 50 51 // recv 52 go func(buf Buffer) { 53 for { 54 v, ok := buf.Recv() 55 if !ok { 56 t.Logf("recve: %v", ok) 57 break 58 } 59 tt := time.Time{} 60 ValueScan(v, &tt) 61 t.Logf("recv: %v, %v", ok, tt) 62 } 63 }(buf) 64 65 wg.Wait() 66 time.Sleep(1 * time.Second) 67 }