53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package eventstore
|
|
|
|
import (
|
|
"cmp"
|
|
"slices"
|
|
"testing"
|
|
|
|
"fiatjaf.com/nostr"
|
|
)
|
|
|
|
func FuzzSortedMerge(f *testing.F) {
|
|
f.Add(uint(4), uint(4), uint(3), uint(7), uint8(2), uint8(1))
|
|
f.Add(uint(0), uint(4), uint(3), uint(7), uint8(2), uint8(1))
|
|
f.Fuzz(func(t *testing.T, len1, len2 uint, start1, start2 uint, diff1, diff2 uint8) {
|
|
maxxx := max(len1*uint(diff1), len2*uint(diff2))
|
|
start1 += maxxx
|
|
start2 += maxxx
|
|
|
|
merged := SortedMerge(
|
|
func(yield func(nostr.Event) bool) {
|
|
for range len1 {
|
|
if !yield(nostr.Event{CreatedAt: nostr.Timestamp(start1)}) {
|
|
return
|
|
}
|
|
start1 -= uint(diff1)
|
|
}
|
|
},
|
|
func(yield func(nostr.Event) bool) {
|
|
for range len2 {
|
|
if !yield(nostr.Event{CreatedAt: nostr.Timestamp(start2)}) {
|
|
return
|
|
}
|
|
start2 -= uint(diff2)
|
|
}
|
|
},
|
|
)
|
|
result := slices.Collect(merged)
|
|
|
|
// assert length
|
|
if len(result) != int(len1+len2) {
|
|
t.Fatalf("expected %d events, got %d", len1+len2, len(result))
|
|
}
|
|
|
|
// assert sorted descending
|
|
slices.IsSortedFunc(result, func(a, b nostr.Event) int { return -1 * cmp.Compare(a.CreatedAt, b.CreatedAt) })
|
|
for i := 1; i < len(result); i++ {
|
|
if result[i].CreatedAt > result[i-1].CreatedAt {
|
|
t.Fatalf("events not sorted descending at index %d: %d > %d", i, result[i].CreatedAt, result[i-1].CreatedAt)
|
|
}
|
|
}
|
|
})
|
|
}
|