summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/beorn7/perks/topk
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2018-04-16 05:37:14 -0700
committerJoram Wilander <jwawilander@gmail.com>2018-04-16 08:37:14 -0400
commit6e2cb00008cbf09e556b00f87603797fcaa47e09 (patch)
tree3c0eb55ff4226a3f024aad373140d1fb860a6404 /vendor/github.com/beorn7/perks/topk
parentbf24f51c4e1cc6286885460672f7f449e8c6f5ef (diff)
downloadchat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.gz
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.tar.bz2
chat-6e2cb00008cbf09e556b00f87603797fcaa47e09.zip
Depenancy upgrades and movign to dep. (#8630)
Diffstat (limited to 'vendor/github.com/beorn7/perks/topk')
-rw-r--r--vendor/github.com/beorn7/perks/topk/topk.go90
-rw-r--r--vendor/github.com/beorn7/perks/topk/topk_test.go57
2 files changed, 0 insertions, 147 deletions
diff --git a/vendor/github.com/beorn7/perks/topk/topk.go b/vendor/github.com/beorn7/perks/topk/topk.go
deleted file mode 100644
index 5ac3d9904..000000000
--- a/vendor/github.com/beorn7/perks/topk/topk.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package topk
-
-import (
- "sort"
-)
-
-// http://www.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf
-
-type Element struct {
- Value string
- Count int
-}
-
-type Samples []*Element
-
-func (sm Samples) Len() int {
- return len(sm)
-}
-
-func (sm Samples) Less(i, j int) bool {
- return sm[i].Count < sm[j].Count
-}
-
-func (sm Samples) Swap(i, j int) {
- sm[i], sm[j] = sm[j], sm[i]
-}
-
-type Stream struct {
- k int
- mon map[string]*Element
-
- // the minimum Element
- min *Element
-}
-
-func New(k int) *Stream {
- s := new(Stream)
- s.k = k
- s.mon = make(map[string]*Element)
- s.min = &Element{}
-
- // Track k+1 so that less frequenet items contended for that spot,
- // resulting in k being more accurate.
- return s
-}
-
-func (s *Stream) Insert(x string) {
- s.insert(&Element{x, 1})
-}
-
-func (s *Stream) Merge(sm Samples) {
- for _, e := range sm {
- s.insert(e)
- }
-}
-
-func (s *Stream) insert(in *Element) {
- e := s.mon[in.Value]
- if e != nil {
- e.Count++
- } else {
- if len(s.mon) < s.k+1 {
- e = &Element{in.Value, in.Count}
- s.mon[in.Value] = e
- } else {
- e = s.min
- delete(s.mon, e.Value)
- e.Value = in.Value
- e.Count += in.Count
- s.min = e
- }
- }
- if e.Count < s.min.Count {
- s.min = e
- }
-}
-
-func (s *Stream) Query() Samples {
- var sm Samples
- for _, e := range s.mon {
- sm = append(sm, e)
- }
- sort.Sort(sort.Reverse(sm))
-
- if len(sm) < s.k {
- return sm
- }
-
- return sm[:s.k]
-}
diff --git a/vendor/github.com/beorn7/perks/topk/topk_test.go b/vendor/github.com/beorn7/perks/topk/topk_test.go
deleted file mode 100644
index c24f0f727..000000000
--- a/vendor/github.com/beorn7/perks/topk/topk_test.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package topk
-
-import (
- "fmt"
- "math/rand"
- "sort"
- "testing"
-)
-
-func TestTopK(t *testing.T) {
- stream := New(10)
- ss := []*Stream{New(10), New(10), New(10)}
- m := make(map[string]int)
- for _, s := range ss {
- for i := 0; i < 1e6; i++ {
- v := fmt.Sprintf("%x", int8(rand.ExpFloat64()))
- s.Insert(v)
- m[v]++
- }
- stream.Merge(s.Query())
- }
-
- var sm Samples
- for x, s := range m {
- sm = append(sm, &Element{x, s})
- }
- sort.Sort(sort.Reverse(sm))
-
- g := stream.Query()
- if len(g) != 10 {
- t.Fatalf("got %d, want 10", len(g))
- }
- for i, e := range g {
- if sm[i].Value != e.Value {
- t.Errorf("at %d: want %q, got %q", i, sm[i].Value, e.Value)
- }
- }
-}
-
-func TestQuery(t *testing.T) {
- queryTests := []struct {
- value string
- expected int
- }{
- {"a", 1},
- {"b", 2},
- {"c", 2},
- }
-
- stream := New(2)
- for _, tt := range queryTests {
- stream.Insert(tt.value)
- if n := len(stream.Query()); n != tt.expected {
- t.Errorf("want %d, got %d", tt.expected, n)
- }
- }
-}