github.com/gogo/protobuf@v1.3.2/io/uint32_test.go (about) 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 }