diff --git a/benchmark_test.go b/benchmark_test.go index 0fb1307..4147d70 100644 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -85,3 +85,16 @@ func BenchmarkNativeFromTextualUsingV2(b *testing.B) { _ = nativeFromTextUsingV2(b, codec, textData) } } + +func BenchmarkScanBinaryUsingV2(b *testing.B) { + avroBlob, err := os.ReadFile("fixtures/quickstop-null.avro") + if err != nil { + b.Fatal(err) + } + nativeData, codec := nativeFromAvroUsingV2(b, avroBlob) + binaryData := binaryFromNativeUsingV2(b, codec, nativeData) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _ = scanBinaryUsingV2(b, codec, binaryData) + } +} diff --git a/helperV2_test.go b/helperV2_test.go index 2a84137..fcd302d 100644 --- a/helperV2_test.go +++ b/helperV2_test.go @@ -101,3 +101,25 @@ func nativeFromTextUsingV2(tb testing.TB, codec *Codec, textData [][]byte) []int } return nativeData } + +type person struct { + ID int64 + First, Last, Phone string + Age int +} + +func scanBinaryUsingV2(tb testing.TB, codec *Codec, binaryData [][]byte) []person { + tb.Helper() + nativeData := make([]person, len(binaryData)) + for i, binaryDatum := range binaryData { + d := nativeData[i] + buf, err := codec.ScanBinary(binaryDatum, &d.ID, &d.First, &d.Last, &d.Phone, &d.Age) + if err != nil { + tb.Fatal(err) + } + if len(buf) > 0 { + tb.Fatalf("BinaryDecode ought to have returned nil buffer: %v", buf) + } + } + return nativeData +}