VictoriaMetrics/lib/logstorage/values_encoder_timing_test.go
Aliaksandr Valialkin 1716c4e609
lib/logstorage: properly parse timezone offset at TryParseTimestampRFC3339Nano()
The TryParseTimestampRFC3339Nano() must properly parse RFC3339 timestamps with timezone offsets.

While at it, make tryParseTimestampISO8601 function private in order to prevent
from improper usage of this function from outside the lib/logstorage package.

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6508
2024-06-25 14:54:24 +02:00

155 lines
2.8 KiB
Go

package logstorage
import (
"fmt"
"sync/atomic"
"testing"
)
func BenchmarkTryParseTimestampRFC3339Nano(b *testing.B) {
a := []string{
"2023-01-15T23:45:51Z",
"2023-02-15T23:45:51.123Z",
"2024-02-15T23:45:51.123456Z",
"2025-02-15T22:45:51.123456789Z",
"2023-02-15T22:45:51.000000000Z",
}
b.SetBytes(int64(len(a)))
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
nSum := int64(0)
for pb.Next() {
for _, s := range a {
n, ok := TryParseTimestampRFC3339Nano(s)
if !ok {
panic(fmt.Errorf("cannot parse timestamp %q", s))
}
nSum += n
}
}
GlobalSink.Add(uint64(nSum))
})
}
func BenchmarkTryParseTimestampISO8601(b *testing.B) {
a := []string{
"2023-01-15T23:45:51.123Z",
"2023-02-15T23:45:51.123Z",
"2024-02-15T23:45:51.123Z",
"2025-02-15T22:45:51.123Z",
"2023-02-15T22:45:51.000Z",
}
b.SetBytes(int64(len(a)))
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
nSum := int64(0)
for pb.Next() {
for _, s := range a {
n, ok := tryParseTimestampISO8601(s)
if !ok {
panic(fmt.Errorf("cannot parse timestamp %q", s))
}
nSum += n
}
}
GlobalSink.Add(uint64(nSum))
})
}
func BenchmarkTryParseIPv4(b *testing.B) {
a := []string{
"1.2.3.4",
"127.0.0.1",
"255.255.255.255",
"192.43.234.22",
"32.34.54.198",
}
b.SetBytes(int64(len(a)))
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
nSum := uint32(0)
for pb.Next() {
for _, s := range a {
n, ok := tryParseIPv4(s)
if !ok {
panic(fmt.Errorf("cannot parse ipv4 %q", s))
}
nSum += n
}
}
GlobalSink.Add(uint64(nSum))
})
}
func BenchmarkTryParseUint64(b *testing.B) {
a := []string{
"1234",
"483932",
"28494",
"90012",
"889111",
}
b.SetBytes(int64(len(a)))
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
var nSum uint64
for pb.Next() {
for _, s := range a {
n, ok := tryParseUint64(s)
if !ok {
panic(fmt.Errorf("cannot parse uint %q", s))
}
nSum += n
}
}
GlobalSink.Add(nSum)
})
}
func BenchmarkTryParseFloat64(b *testing.B) {
a := []string{
"1.234",
"4.545",
"456.5645",
"-123.434",
"434.322",
}
b.SetBytes(int64(len(a)))
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
var fSum float64
for pb.Next() {
for _, s := range a {
f, ok := tryParseFloat64(s)
if !ok {
panic(fmt.Errorf("cannot parse float64 %q", s))
}
fSum += f
}
}
GlobalSink.Add(uint64(fSum))
})
}
func BenchmarkMarshalUint8String(b *testing.B) {
b.SetBytes(256)
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
var buf []byte
n := 0
for pb.Next() {
for i := 0; i < 256; i++ {
buf = marshalUint8String(buf[:0], uint8(i))
n += len(buf)
}
}
GlobalSink.Add(uint64(n))
})
}
var GlobalSink atomic.Uint64