...
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
42
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