mirror of
https://github.com/hanzoai/search-go.git
synced 2026-10-30 18:22:58 +00:00
Modules declare go 1.27.1 and the build images follow. go fix applied the modernizers, and the test and example pointer helpers went once new(expr) could say them; omitzero is not applied, since it changes what the JSON says. Co-authored-by: Hanzo Dev <[email protected]>
138 lines
2.9 KiB
Go
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]any
|
|
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]any
|
|
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]any
|
|
if err := encoder.Decode(payload, &result); err != nil {
|
|
b.Fatalf("Decode failed: %v", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func sampleMapData() map[string]any {
|
|
return map[string]any{
|
|
"key1": "value1",
|
|
"key2": 12345,
|
|
"key3": []string{"item1", "item2", "item3"},
|
|
}
|
|
}
|