github.com/andy2046/gopie@v0.7.0/pkg/quickselect/quickselect_test.go (about) 1 package quickselect_test 2 3 import ( 4 "testing" 5 "time" 6 7 "math/rand" 8 9 "github.com/andy2046/gopie/pkg/quickselect" 10 "github.com/andy2046/gopie/pkg/quicksort" 11 ) 12 13 func TestQuickselect(t *testing.T) { 14 size := 20 15 selected := 10 16 max := 999 17 s := make([]int, 0, size) 18 rand.Seed(time.Now().UTC().UnixNano()) 19 for range make([]struct{}, size) { 20 s = append(s, rand.Intn(max)) 21 } 22 t.Logf("before -> %v", s) 23 quickselect.Select(s, selected) 24 t.Logf("after -> %v", s) 25 se := s[selected-1] 26 t.Logf("%dth selected -> %v", selected, se) 27 quicksort.Sort(s) 28 so := s[selected-1] 29 t.Logf("sorted -> %v", s) 30 if se != so { 31 t.Fatalf("expected %d, got %d", so, se) 32 } 33 } 34 35 func BenchmarkQuickselect(b *testing.B) { 36 size := 1000000 37 selected := size - 10 38 s := make([]int, 0, size) 39 rand.Seed(time.Now().UTC().UnixNano()) 40 for range make([]struct{}, size) { 41 s = append(s, rand.Int()) 42 } 43 b.ResetTimer() 44 quickselect.Select(s, selected) 45 }