package bench_test
import (
"io"
"testing"
"time"
"mercemay.top/src/lambdalog/internal/encoder"
logjson "mercemay.top/src/lambdalog/internal/encoder/json"
)
func makeRecord(fields int) encoder.Record {
fs := make([]encoder.Field, fields)
for i := range fs {
fs[i] = encoder.Field{Key: "k", Value: "v"}
}
return encoder.Record{
Time: time.Unix(1700000000, 0).UTC(),
Level: "info",
Message: "hello",
RequestID: "req-1",
Fields: fs,
}
}
func BenchmarkJSONEncoder_Small(b *testing.B) {
enc := logjson.Encoder{}
rec := makeRecord(2)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := enc.Encode(io.Discard, rec); err != nil {
b.Fatalf("encode: %v", err)
}
}
}
func BenchmarkJSONEncoder_Medium(b *testing.B) {
enc := logjson.Encoder{}
rec := makeRecord(8)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = enc.Encode(io.Discard, rec)
}
}
func BenchmarkJSONEncoder_Large(b *testing.B) {
enc := logjson.Encoder{}
rec := makeRecord(32)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = enc.Encode(io.Discard, rec)
}
}
func BenchmarkJSONEncoder_Parallel(b *testing.B) {
enc := logjson.Encoder{}
rec := makeRecord(8)
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
_ = enc.Encode(io.Discard, rec)
}
})
}
func BenchmarkFormatTimestamp(b *testing.B) {
t := time.Unix(1700000000, 42).UTC()
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = encoder.FormatTimestamp(t)
}
}
func BenchmarkFormatLevel(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = encoder.FormatLevel("WARN")
}
}