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  }