Files
search-go/encoding_bench_test.go
Javad RajabzadehandGitHub 9459d64c4e Bump minimum go version into 1.20 (#659)
* chore: update Go version to 1.20 and golangci-lint to v2.3.0 in Dockerfile and tests.yml

* fix: update golangci action version to latest

* chore: fix linter issues

* chore: update Go version in pre-release and tests configuration to 1.20

* chore: update dependency management in tests.yml to use go.mod

* chore: update dependency management in pre-release-tests.yml to use go.mod

* chore: simplify dependency retrieval in CI configuration

* chore: remove unnecessary flags in dependency retrieval for CI configurations

* chore: update Go version format in CI configuration files
2025-07-31 19:51:48 +02:00

138 lines
2.9 KiB
Go

package meilisearch
import (
"bytes"
"encoding/json"
"io"
"testing"
)
func generate1MBData() []byte {
return bytes.Repeat([]byte("a"), 1024*1024)
}
func BenchmarkGzipEncoder(b *testing.B) {
encoder := newEncoding(GzipEncoding, DefaultCompression)
raw := generate1MBData()
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
reader := bytes.NewReader(raw)
encoded, err := encoder.Encode(reader)
if err != nil {
b.Fatalf("Encode failed: %v", err)
}
_, _ = io.Copy(io.Discard, encoded)
_ = encoded.Close()
}
}
func BenchmarkDeflateEncoder(b *testing.B) {
encoder := newEncoding(DeflateEncoding, DefaultCompression)
raw := generate1MBData()
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
reader := bytes.NewReader(raw)
encoded, err := encoder.Encode(reader)
if err != nil {
b.Fatalf("Encode failed: %v", err)
}
_, _ = io.Copy(io.Discard, encoded)
_ = encoded.Close()
}
}
func BenchmarkBrotliEncoder(b *testing.B) {
encoder := newEncoding(BrotliEncoding, DefaultCompression)
raw := generate1MBData()
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
reader := bytes.NewReader(raw)
encoded, err := encoder.Encode(reader)
if err != nil {
b.Fatalf("Encode failed: %v", err)
}
_, _ = io.Copy(io.Discard, encoded)
_ = encoded.Close()
}
}
func BenchmarkGzipDecoder(b *testing.B) {
encoder := newEncoding(GzipEncoding, DefaultCompression)
jsonData, _ := json.Marshal(sampleMapData())
encoded, _ := encoder.Encode(bytes.NewReader(jsonData))
defer func() {
_ = encoded.Close()
}()
payload, _ := io.ReadAll(encoded)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
var result map[string]interface{}
if err := encoder.Decode(payload, &result); err != nil {
b.Fatalf("Decode failed: %v", err)
}
}
}
func BenchmarkFlateDecoder(b *testing.B) {
encoder := newEncoding(DeflateEncoding, DefaultCompression)
jsonData, _ := json.Marshal(sampleMapData())
encoded, _ := encoder.Encode(bytes.NewReader(jsonData))
defer func() {
_ = encoded.Close()
}()
payload, _ := io.ReadAll(encoded)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
var result map[string]interface{}
if err := encoder.Decode(payload, &result); err != nil {
b.Fatalf("Decode failed: %v", err)
}
}
}
func BenchmarkBrotliDecoder(b *testing.B) {
encoder := newEncoding(BrotliEncoding, DefaultCompression)
jsonData, _ := json.Marshal(sampleMapData())
encoded, _ := encoder.Encode(bytes.NewReader(jsonData))
defer func() {
_ = encoded.Close()
}()
payload, _ := io.ReadAll(encoded)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
var result map[string]interface{}
if err := encoder.Decode(payload, &result); err != nil {
b.Fatalf("Decode failed: %v", err)
}
}
}
func sampleMapData() map[string]interface{} {
return map[string]interface{}{
"key1": "value1",
"key2": 12345,
"key3": []string{"item1", "item2", "item3"},
}
}