v/vlib/x/encoding/asn1/bench/bench.go

54 lines
1.2 KiB
Go

package main
import (
"encoding/asn1"
"fmt"
"time"
)
type Example struct {
Greeting string `asn1:"utf8"`
Answer int
Tipe asn1.ObjectIdentifier `asn1:"explicit,tag:1"`
}
func main() {
iterations := 1000
expected_output := []byte{0x30, 18, 12, 5, 72, 101, 108, 108, 111, 2, 1, 42, 0xA1,
6, 6, 4, 43, 6, 1, 3}
oid := []int{1, 3, 6, 1, 3}
ex := Example{
Greeting: "Hello",
Answer: 42,
Tipe: asn1.ObjectIdentifier(oid),
}
fmt.Println("Benchmarking golang Marshal...")
var totalMarshalTime int64
for i := 0; i < iterations; i++ {
start := time.Now()
_, err := asn1.Marshal(ex)
if err != nil {
panic(err)
}
totalMarshalTime += time.Since(start).Microseconds()
}
avgMarshalTime := totalMarshalTime / int64(iterations)
fmt.Printf("Average Marshal time: %d µs\n", avgMarshalTime)
fmt.Println("Benchmarking Unmarshal...")
var totalUnmarshalTime int64
var xx Example
for i := 0; i < iterations; i++ {
start := time.Now()
_, err := asn1.Unmarshal(expected_output, &xx)
if err != nil {
panic(err)
}
totalUnmarshalTime += time.Since(start).Microseconds()
}
avgUnmarshalTime := totalUnmarshalTime / int64(iterations)
fmt.Printf("Average Unmarshal time: %d µs\n", avgUnmarshalTime)
}