underscore/join_test.go
Ruidy 92b64630dc
perf: pre-allocate Filter result slice
Improves Filter performance by pre-allocating result slice with
input capacity instead of growing dynamically.

Performance improvements:
- Time: 1867 ns/op → 1717 ns/op (8% faster)
- Allocations: 10 → 1 (90% reduction)

This significantly reduces GC pressure for high-frequency operations.

Also updates Join test to expect empty slice [] instead of nil,
which is better Go practice.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 13:44:07 +01:00

48 lines
1.5 KiB
Go

package underscore_test
import (
"testing"
"github.com/stretchr/testify/assert"
u "github.com/rjNemo/underscore"
)
var (
zero = u.Tuple[int, string]{Left: 0, Right: "Zero"}
one = u.Tuple[int, string]{Left: 1, Right: "One"}
two = u.Tuple[int, string]{Left: 2, Right: "Two"}
three = u.Tuple[int, string]{Left: 3, Right: "Three"}
)
func Test_Join_Can_Join_Two_Slices_Together(t *testing.T) {
left := []u.Tuple[int, string]{zero, one, two, three}
right := []u.Tuple[int, string]{one, three, two, three, two, three}
selector := func(x u.Tuple[int, string]) int { return x.Left }
joined := u.Join(left, right, selector, selector)
want := []u.Tuple[u.Tuple[int, string], []u.Tuple[int, string]]{
{Left: zero, Right: []u.Tuple[int, string]{}},
{Left: one, Right: []u.Tuple[int, string]{one}},
{Left: two, Right: []u.Tuple[int, string]{two, two}},
{Left: three, Right: []u.Tuple[int, string]{three, three, three}},
}
assert.Equal(t, want, joined)
}
func Test_Join_Can_Join_and_Project_Two_Slices_Together(t *testing.T) {
left := []u.Tuple[int, string]{zero, one, two, three}
right := []u.Tuple[int, string]{one, three, two, three, two, three}
selector := func(x u.Tuple[int, string]) int { return x.Left }
project := func(x u.Tuple[u.Tuple[int, string], []u.Tuple[int, string]]) int {
return len(x.Right) // projecting to a could of how many
}
joined := u.JoinProject(left, right, selector, selector, project)
want := []int{0, 1, 2, 3}
assert.Equal(t, want, joined)
}