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, }, ) } }