1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package proto
import (
"errors"
"io"
"math"
"testing"
)
func TestMarshalToShortBuffer(t *testing.T) {
m := message{
A: 1,
B: 2,
C: 3,
S: submessage{
X: "hello",
Y: "world",
},
}
b, _ := Marshal(m)
short := make([]byte, len(b))
for i := range b {
t.Run("", func(t *testing.T) {
n, err := MarshalTo(short[:i], m)
if n != i {
t.Errorf("byte count mismatch, want %d but got %d", i, n)
}
if !errors.Is(err, io.ErrShortBuffer) {
t.Errorf("error mismatch, want io.ErrShortBuffer but got %q", err)
}
})
}
}
func BenchmarkEncodeVarintShort(b *testing.B) {
c := [10]byte{}
for range b.N {
encodeVarint(c[:], 0)
}
}
func BenchmarkEncodeVarintLong(b *testing.B) {
c := [10]byte{}
for range b.N {
encodeVarint(c[:], math.MaxUint64)
}
}
func BenchmarkEncodeTag(b *testing.B) {
c := [8]byte{}
for range b.N {
encodeTag(c[:], 1, varint)
}
}
func BenchmarkEncodeMessage(b *testing.B) {
buf := [128]byte{}
msg := &message{
A: 1,
B: 100,
C: 10000,
S: submessage{
X: "",
Y: "Hello World!",
},
}
size := Size(msg)
data := buf[:size]
b.SetBytes(int64(size))
for range b.N {
if _, err := MarshalTo(data, msg); err != nil {
b.Fatal(err)
}
}
}
func BenchmarkEncodeMap(b *testing.B) {
buf := [128]byte{}
msg := struct {
M map[string]string
}{
M: map[string]string{
"hello": "world",
},
}
size := Size(msg)
data := buf[:size]
b.SetBytes(int64(size))
for range b.N {
if _, err := MarshalTo(data, msg); err != nil {
b.Fatal(err)
}
}
}
func BenchmarkEncodeSlice(b *testing.B) {
buf := [128]byte{}
msg := struct {
S []int
}{
S: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
}
size := Size(msg)
data := buf[:size]
b.SetBytes(int64(size))
for range b.N {
if _, err := MarshalTo(data, &msg); err != nil {
b.Fatal(err)
}
}
}
|