Skip to content

Commit d391aad

Browse files
committed
Added delete function benchmarks
1 parent b72eb3c commit d391aad

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

pkg/ottl/ottlfuncs/func_delete.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func deleteFrom[K any](target ottl.PSliceGetSetter[K], startIndexGetter ottl.Int
6969
}
7070

7171
var i int64
72-
t.RemoveIf(func(v pcommon.Value) bool {
72+
t.RemoveIf(func(_ pcommon.Value) bool {
7373
remove := i >= startIndex && i < endIndex
7474
i++
7575
return remove

pkg/ottl/ottlfuncs/func_delete_test.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package ottlfuncs
66
import (
77
"context"
88
"errors"
9+
"fmt"
910
"testing"
1011

1112
"github.com/stretchr/testify/assert"
@@ -323,3 +324,106 @@ func TestDelete_Errors(t *testing.T) {
323324
})
324325
}
325326
}
327+
328+
func BenchmarkDelete_Position_SliceSizes(b *testing.B) {
329+
testCases := []struct {
330+
name string
331+
sliceSize, index int
332+
}{
333+
{"Last-Small/10", 10, 9},
334+
{"Last-Medium/100", 100, 99},
335+
{"Last-Large/1000", 1000, 999},
336+
{"Last-Huge/10000", 10000, 9999},
337+
{"Middle-Small/10", 10, 4},
338+
{"Middle-Medium/100", 100, 49},
339+
{"Middle-Large/1000", 1000, 499},
340+
{"Middle-Huge/10000", 10000, 4999},
341+
{"First-Small/10", 10, 0},
342+
{"First-Medium/100", 100, 0},
343+
{"First-Large/1000", 1000, 0},
344+
{"First-Huge/10000", 10000, 0},
345+
}
346+
for _, tc := range testCases {
347+
b.Run(tc.name, func(b *testing.B) {
348+
benchmarkDeleteIndex(b, tc.sliceSize, tc.index)
349+
})
350+
}
351+
}
352+
353+
func BenchmarkDelete_DeleteRanges(b *testing.B) {
354+
testCases := []struct {
355+
name string
356+
sliceSize, start, end int
357+
}{
358+
{"Range1", 1000, 500, 501},
359+
{"Range10", 1000, 500, 510},
360+
{"Range100", 1000, 500, 600},
361+
{"Range500", 1000, 500, 999},
362+
}
363+
for _, tc := range testCases {
364+
b.Run(tc.name, func(b *testing.B) {
365+
benchmarkDelete(b, tc.sliceSize, tc.start, tc.end)
366+
})
367+
}
368+
}
369+
370+
func benchmarkDeleteIndex(b *testing.B, sliceSize, index int) {
371+
benchmarkDelete(b, sliceSize, index, 0)
372+
}
373+
374+
func benchmarkDelete(b *testing.B, sliceSize, startIndex, endIndex int) {
375+
startIndexGetter := mockIntGetter(int64(startIndex))
376+
377+
var endIndexGetter ottl.Optional[ottl.IntGetter[any]]
378+
if endIndex > 0 {
379+
endIndexGetter = ottl.NewTestingOptional(mockIntGetter(int64(endIndex)))
380+
} else {
381+
endIndexGetter = nilOptional
382+
}
383+
384+
originalSlice := createBenchmarkSlice(sliceSize)
385+
386+
b.ResetTimer()
387+
b.ReportAllocs()
388+
389+
for i := 0; i < b.N; i++ {
390+
// Create a copy of the slice for each iteration, since we're modifying target inside deleteFrom func.
391+
sourceSlice := pcommon.NewSlice()
392+
originalSlice.CopyTo(sourceSlice)
393+
394+
target := sliceGetSetter(func(_ context.Context, _ any) (any, error) {
395+
return sourceSlice, nil
396+
})
397+
exprFunc := deleteFrom(target, startIndexGetter, endIndexGetter)
398+
399+
res := pcommon.NewSlice()
400+
b.StartTimer()
401+
_, err := exprFunc(b.Context(), res)
402+
b.StopTimer()
403+
if err != nil {
404+
b.Fatal(err)
405+
}
406+
}
407+
}
408+
409+
func createBenchmarkSlice(sliceSize int) pcommon.Slice {
410+
slice := pcommon.NewSlice()
411+
412+
for i := 0; i < sliceSize; i++ {
413+
switch i % 5 {
414+
case 0:
415+
slice.AppendEmpty().SetStr(fmt.Sprintf("string_%d", i))
416+
case 1:
417+
slice.AppendEmpty().SetInt(int64(i))
418+
case 2:
419+
slice.AppendEmpty().SetDouble(float64(i))
420+
case 3:
421+
slice.AppendEmpty().SetBool(i%2 == 0)
422+
case 4:
423+
nested := slice.AppendEmpty().SetEmptySlice()
424+
nested.AppendEmpty().SetInt(int64(i))
425+
}
426+
}
427+
428+
return slice
429+
}

0 commit comments

Comments
 (0)