...

Source file src/github.com/gogo/protobuf/io/uint32_test.go

Documentation: github.com/gogo/protobuf/io

     1  package io_test
     2  
     3  import (
     4  	"encoding/binary"
     5  	"io/ioutil"
     6  	"math/rand"
     7  	"reflect"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/gogo/protobuf/test"
    12  	example "github.com/gogo/protobuf/test/example"
    13  
    14  	"github.com/gogo/protobuf/io"
    15  )
    16  
    17  func BenchmarkUint32DelimWriterMarshaller(b *testing.B) {
    18  	w := io.NewUint32DelimitedWriter(ioutil.Discard, binary.BigEndian)
    19  	r := rand.New(rand.NewSource(time.Now().UnixNano()))
    20  	msg := example.NewPopulatedA(r, true)
    21  
    22  	for i := 0; i < b.N; i++ {
    23  		if err := w.WriteMsg(msg); err != nil {
    24  			b.Fatal(err)
    25  		}
    26  	}
    27  }
    28  
    29  func BenchmarkUint32DelimWriterFallback(b *testing.B) {
    30  	w := io.NewUint32DelimitedWriter(ioutil.Discard, binary.BigEndian)
    31  	r := rand.New(rand.NewSource(time.Now().UnixNano()))
    32  	msg := test.NewPopulatedNinOptNative(r, true)
    33  
    34  	for i := 0; i < b.N; i++ {
    35  		if err := w.WriteMsg(msg); err != nil {
    36  			b.Fatal(err)
    37  		}
    38  	}
    39  }
    40  
    41  // Writing the same size messaged twice should not cause another
    42  // reader buffer allocation
    43  func TestUint32SameSizeNoAlloc(t *testing.T) {
    44  	buf := newBuffer()
    45  	writer := io.NewUint32DelimitedWriter(buf, binary.LittleEndian)
    46  	reader := io.NewUint32DelimitedReader(buf, binary.LittleEndian, 1024*1024)
    47  
    48  	err := writer.WriteMsg(&test.NinOptNative{Field15: []byte("numbercatinvention")})
    49  	if err != nil {
    50  		t.Fatal(err)
    51  	}
    52  	err = writer.WriteMsg(&test.NinOptNative{Field15: []byte("fastenselectionsky")})
    53  	if err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	if err := writer.Close(); err != nil {
    57  		t.Fatal(err)
    58  	}
    59  
    60  	msg := &test.NinOptNative{}
    61  	if err := reader.ReadMsg(msg); err != nil {
    62  		t.Fatal(err)
    63  	}
    64  	firstRead := reflect.ValueOf(reader).Elem().FieldByName("buf").Pointer()
    65  	if err := reader.ReadMsg(msg); err != nil {
    66  		t.Fatal(err)
    67  	}
    68  	secondRead := reflect.ValueOf(reader).Elem().FieldByName("buf").Pointer()
    69  
    70  	if firstRead != secondRead {
    71  		t.Fatalf("reader buf byte slice pointer did not stay the same after second same size read (%d != %d).", firstRead, secondRead)
    72  	}
    73  }
    74  

View as plain text