Files
nostrlib/eventstore/lmdb/utils_test.go
2025-08-05 22:56:55 -03:00

1194 lines
16 KiB
Go

package lmdb
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestQuickselect(t *testing.T) {
{
its := iterators{
{last: 781},
{last: 900},
{last: 1},
{last: 81},
{last: 325},
{last: 781},
{last: 562},
{last: 81},
{last: 444},
}
its.quickselect(3)
require.ElementsMatch(t,
[]uint32{its[0].last, its[1].last, its[2].last},
[]uint32{900, 781, 781},
)
}
{
its := iterators{
{last: 781},
{last: 781},
{last: 900},
{last: 1},
{last: 87},
{last: 315},
{last: 789},
{last: 500},
{last: 812},
{last: 306},
{last: 612},
{last: 444},
{last: 59},
{last: 441},
{last: 901},
{last: 901},
{last: 2},
{last: 81},
{last: 325},
{last: 781},
{last: 562},
{last: 81},
{last: 326},
{last: 662},
{last: 444},
{last: 81},
{last: 444},
}
its.quickselect(6)
require.ElementsMatch(t,
[]uint32{its[0].last, its[1].last, its[2].last, its[3].last, its[4].last, its[5].last},
[]uint32{901, 900, 901, 781, 812, 789},
)
}
{
its := iterators{
{last: 229},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 85},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 121},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 157},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 193},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 329},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 185},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 221},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 257},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 293},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 429},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 285},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 321},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 357},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 393},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 529},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 385},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 421},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 457},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 493},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 629},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 485},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 521},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 557},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 593},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 729},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 585},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 621},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 657},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 693},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
{last: 0},
}
its.quickselect(18)
require.ElementsMatch(t,
[]uint32{
its[0].last, its[1].last, its[2].last, its[3].last, its[4].last, its[5].last,
its[6].last, its[7].last, its[8].last, its[9].last, its[10].last, its[11].last,
its[12].last, its[13].last, its[14].last, its[15].last, its[16].last, its[17].last,
},
[]uint32{
729,
693,
657,
629,
621,
593,
585,
557,
529,
521,
493,
485,
457,
429,
421,
393,
385,
357,
},
)
}
}