From 12e46583e5076e7bd810ba8e528404e43e59c323 Mon Sep 17 00:00:00 2001 From: Javad Date: Wed, 25 Dec 2024 11:31:59 +0330 Subject: [PATCH] chore: add benchmark for encode and decode --- encoding_bench_test.go | 148 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 encoding_bench_test.go diff --git a/encoding_bench_test.go b/encoding_bench_test.go new file mode 100644 index 0000000..fbf2940 --- /dev/null +++ b/encoding_bench_test.go @@ -0,0 +1,148 @@ +package meilisearch + +import ( + "bytes" + "encoding/json" + "testing" +) + +func BenchmarkGzipEncoder(b *testing.B) { + encoder := newEncoding(GzipEncoding, DefaultCompression) + data := bytes.NewReader(make([]byte, 1024*1024)) // 1 MB of data + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + buf, err := encoder.Encode(data) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + _ = buf + } +} + +func BenchmarkDeflateEncoder(b *testing.B) { + encoder := newEncoding(DeflateEncoding, DefaultCompression) + data := bytes.NewReader(make([]byte, 1024*1024)) // 1 MB of data + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + buf, err := encoder.Encode(data) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + _ = buf + } +} + +func BenchmarkBrotliEncoder(b *testing.B) { + encoder := newEncoding(BrotliEncoding, DefaultCompression) + data := bytes.NewReader(make([]byte, 1024*1024)) // 1 MB of data + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + buf, err := encoder.Encode(data) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + _ = buf + } +} + +func BenchmarkGzipDecoder(b *testing.B) { + encoder := newEncoding(GzipEncoding, DefaultCompression) + + // Prepare a valid JSON input + data := map[string]interface{}{ + "key1": "value1", + "key2": 12345, + "key3": []string{"item1", "item2", "item3"}, + } + jsonData, err := json.Marshal(data) + if err != nil { + b.Fatalf("JSON marshal failed: %v", err) + } + + // Encode the valid JSON data + input := bytes.NewReader(jsonData) + encoded, err := encoder.Encode(input) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + var result map[string]interface{} + if err := encoder.Decode(encoded.Bytes(), &result); err != nil { + b.Fatalf("Decode failed: %v", err) + } + } +} + +func BenchmarkFlateDecoder(b *testing.B) { + encoder := newEncoding(DeflateEncoding, DefaultCompression) + + // Prepare valid JSON input + data := map[string]interface{}{ + "key1": "value1", + "key2": 12345, + "key3": []string{"item1", "item2", "item3"}, + } + jsonData, err := json.Marshal(data) + if err != nil { + b.Fatalf("JSON marshal failed: %v", err) + } + + // Encode the valid JSON data + input := bytes.NewReader(jsonData) + encoded, err := encoder.Encode(input) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + var result map[string]interface{} + if err := encoder.Decode(encoded.Bytes(), &result); err != nil { + b.Fatalf("Decode failed: %v", err) + } + } +} + +func BenchmarkBrotliDecoder(b *testing.B) { + encoder := newEncoding(BrotliEncoding, DefaultCompression) + + // Prepare valid JSON input + data := map[string]interface{}{ + "key1": "value1", + "key2": 12345, + "key3": []string{"item1", "item2", "item3"}, + } + jsonData, err := json.Marshal(data) + if err != nil { + b.Fatalf("JSON marshal failed: %v", err) + } + + // Encode the valid JSON data + input := bytes.NewReader(jsonData) + encoded, err := encoder.Encode(input) + if err != nil { + b.Fatalf("Encode failed: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + var result map[string]interface{} + if err := encoder.Decode(encoded.Bytes(), &result); err != nil { + b.Fatalf("Decode failed: %v", err) + } + } +}