forked from stellar/go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxdr_test.go
134 lines (115 loc) · 3.24 KB
/
xdr_test.go
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
123
124
125
126
127
128
129
130
131
132
133
134
package benchmarks
import (
"bytes"
"encoding/base64"
"testing"
xdr3 "github.com/stellar/go-xdr/xdr3"
"github.com/stellar/go/gxdr"
"github.com/stellar/go/xdr"
goxdr "github.com/xdrpp/goxdr/xdr"
)
const input64 = "AAAAAgAAAACfHrX0tYB0gpXuJYTN9os06cdF62KAaqY9jid+777eyQAAC7gCM9czAAi/DQAAAAEAAAAAAAAAAAAAAABhga2dAAAAAAAAAAMAAAAAAAAADAAAAAAAAAABTU9CSQAAAAA8cTArnmXa4wEQJxDHOw5SwBaDVjBfAP5lRMNZkRtlZAAAAAAG42RBAAf7lQCYloAAAAAAMgbg0AAAAAAAAAADAAAAAU1PQkkAAAAAPHEwK55l2uMBECcQxzsOUsAWg1YwXwD+ZUTDWZEbZWQAAAAAAAAADkpyV7kAARBNABMS0AAAAAAyBuDRAAAAAAAAAAMAAAABTU9CSQAAAAA8cTArnmXa4wEQJxDHOw5SwBaDVjBfAP5lRMNZkRtlZAAAAAAAAAAclOSvewAIl5kAmJaAAAAAADIG4NIAAAAAAAAAAe++3skAAABAs2jt6+cyeyFvXVFphBcwt18GXnj7Jwa+hWQRyaBmPOSR2415GBi8XY3lC4m4aX9S322HvHjrxgQiar7KjgnQDw=="
var input = func() []byte {
decoded, err := base64.StdEncoding.DecodeString(input64)
if err != nil {
panic(err)
}
return decoded
}()
var xdrInput = func() xdr.TransactionEnvelope {
var te xdr.TransactionEnvelope
if err := te.UnmarshalBinary(input); err != nil {
panic(err)
}
return te
}()
var gxdrInput = func() gxdr.TransactionEnvelope {
var te gxdr.TransactionEnvelope
// note goxdr will panic if there's a marshaling error.
te.XdrMarshal(&goxdr.XdrIn{In: bytes.NewReader(input)}, "")
return te
}()
func BenchmarkXDRUnmarshalWithReflection(b *testing.B) {
var (
r bytes.Reader
te xdr.TransactionEnvelope
)
for i := 0; i < b.N; i++ {
r.Reset(input)
_, _ = xdr3.Unmarshal(&r, &te)
}
}
func BenchmarkXDRUnmarshal(b *testing.B) {
var te xdr.TransactionEnvelope
for i := 0; i < b.N; i++ {
_ = te.UnmarshalBinary(input)
}
}
func BenchmarkGXDRUnmarshal(b *testing.B) {
var (
te gxdr.TransactionEnvelope
r bytes.Reader
)
for i := 0; i < b.N; i++ {
r.Reset(input)
te.XdrMarshal(&goxdr.XdrIn{In: &r}, "")
}
}
func BenchmarkXDRMarshalWithReflection(b *testing.B) {
for i := 0; i < b.N; i++ {
_, _ = xdr3.Marshal(&bytes.Buffer{}, xdrInput)
}
}
func BenchmarkXDRMarshal(b *testing.B) {
for i := 0; i < b.N; i++ {
_, _ = xdrInput.MarshalBinary()
}
}
func BenchmarkXDRMarshalWithEncodingBuffer(b *testing.B) {
e := xdr.NewEncodingBuffer()
for i := 0; i < b.N; i++ {
_, _ = e.UnsafeMarshalBinary(xdrInput)
}
}
func BenchmarkGXDRMarshal(b *testing.B) {
var output bytes.Buffer
// Benchmark.
for i := 0; i < b.N; i++ {
output.Reset()
gxdrInput.XdrMarshal(&goxdr.XdrOut{Out: &output}, "")
}
}
func BenchmarkXDRMarshalHex(b *testing.B) {
for i := 0; i < b.N; i++ {
_, _ = xdr.MarshalHex(xdrInput)
}
}
func BenchmarkXDRMarshalHexWithEncodingBuffer(b *testing.B) {
e := xdr.NewEncodingBuffer()
for i := 0; i < b.N; i++ {
_, _ = e.MarshalHex(xdrInput)
}
}
func BenchmarkXDRUnsafeMarshalHexWithEncodingBuffer(b *testing.B) {
e := xdr.NewEncodingBuffer()
for i := 0; i < b.N; i++ {
_, _ = e.UnsafeMarshalHex(xdrInput)
}
}
func BenchmarkXDRMarshalBase64(b *testing.B) {
for i := 0; i < b.N; i++ {
_, _ = xdr.MarshalBase64(xdrInput)
}
}
func BenchmarkXDRMarshalBase64WithEncodingBuffer(b *testing.B) {
e := xdr.NewEncodingBuffer()
for i := 0; i < b.N; i++ {
_, _ = e.MarshalBase64(xdrInput)
}
}
func BenchmarkXDRUnsafeMarshalBase64WithEncodingBuffer(b *testing.B) {
e := xdr.NewEncodingBuffer()
for i := 0; i < b.N; i++ {
_, _ = e.UnsafeMarshalBase64(xdrInput)
}
}