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  }