structure_old/priority_queue/priority_queue_test.go

216 lines
3.2 KiB
Go
Raw Normal View History

2019-01-26 10:45:30 +00:00
package plist
import (
"testing"
2019-01-26 10:45:30 +00:00
2019-01-31 10:39:17 +00:00
"github.com/emirpasic/gods/utils"
"github.com/Pallinder/go-randomdata"
"github.com/emirpasic/gods/trees/binaryheap"
)
2019-02-13 18:42:14 +00:00
func TestPriorityQueueGet(t *testing.T) {
p := NewWithInt()
2019-02-08 22:32:58 +00:00
2019-02-13 18:42:14 +00:00
var l []int
for i := 0; i < 10; i++ {
l = append(l, randomdata.Number(0, 1000))
}
2019-02-13 08:47:11 +00:00
2019-02-13 18:42:14 +00:00
for _, v := range l {
p.Push(v)
t.Log(p.String())
}
2019-02-01 11:18:48 +00:00
2019-02-13 18:42:14 +00:00
t.Error(p.data.Values())
2019-02-01 11:18:48 +00:00
2019-02-13 18:42:14 +00:00
}
2019-02-08 22:32:58 +00:00
2019-02-13 18:42:14 +00:00
func TestPriorityQueuePush(t *testing.T) {
p := NewWithInt()
var l []int
for i := 0; i < 20; i++ {
l = append(l, randomdata.Number(0, 5))
}
for _, v := range l {
p.Push(v)
t.Log(p.String())
}
t.Error(l)
t.Error(p.data.Values(), p.Head, p.Tail)
cur := p.Head
for cur != nil {
t.Error(cur.Value)
cur = cur.Prev()
}
t.Error("-----")
cur = p.Tail
for cur != nil {
t.Error(cur.Value)
cur = cur.Next()
}
}
2019-02-01 11:18:48 +00:00
2019-02-14 10:36:19 +00:00
func TestPriorityQueueRemove(t *testing.T) {
p := NewWithInt()
2019-01-26 10:45:30 +00:00
2019-02-14 10:36:19 +00:00
for i := 0; i < 20; i++ {
p.Push(randomdata.Number(0, 10))
}
t.Error(p.Values())
n, ok := p.GetNode(0)
t.Error(n, ok, p.Head, p.Tail)
2019-01-31 10:39:17 +00:00
2019-02-14 10:36:19 +00:00
for i := 0; i < 20; i++ {
t.Error(p.Remove(0), p.data.Size())
t.Error(p.Values())
}
}
2019-02-13 18:42:14 +00:00
func BenchmarkPriorityQueuePush(b *testing.B) {
p := NewWithInt()
2019-02-13 18:42:14 +00:00
b.N = 1000000
for i := 0; i < b.N; i++ {
p.Push(randomdata.Number(0, 100000))
}
}
2019-01-26 10:45:30 +00:00
2019-02-14 10:36:19 +00:00
func BenchmarkPriorityQueueRemove(b *testing.B) {
p := NewWithInt()
for i := 0; i < 1000000; i++ {
p.Push(randomdata.Number(0, 100000))
}
b.StartTimer()
b.N = 1000000
for i := 0; i < b.N-100; i++ {
p.Remove(randomdata.Number(0, 100))
}
for p.Remove(0) != nil {
}
}
2019-02-13 18:42:14 +00:00
func BenchmarkPriorityQueueGet(b *testing.B) {
p := NewWithInt()
2019-02-13 10:02:01 +00:00
2019-02-13 18:42:14 +00:00
for i := 0; i < 500000; i++ {
p.Push(randomdata.Number(0, 100000))
// p.Values()
}
2019-02-13 10:02:01 +00:00
2019-02-13 18:42:14 +00:00
b.ResetTimer()
b.StartTimer()
b.N = 100000
for i := 0; i < b.N; i++ {
p.Get(randomdata.Number(0, 1000))
}
b.StopTimer()
2019-02-13 10:02:01 +00:00
2019-02-13 18:42:14 +00:00
}
2019-02-13 10:02:01 +00:00
func TestAVL(t *testing.T) {
2019-02-13 10:54:03 +00:00
avl := NewWithIntComparator()
2019-02-14 10:36:19 +00:00
for i := 0; i < 100; i++ {
2019-02-13 10:54:03 +00:00
v := randomdata.Number(0, 100)
2019-02-14 10:36:19 +00:00
avl.Put(v)
2019-02-13 10:02:01 +00:00
}
2019-02-14 10:36:19 +00:00
t.Error(avl.size)
2019-02-13 10:02:01 +00:00
t.Error(avl.Values())
2019-02-13 10:54:03 +00:00
f, ok := avl.Ceiling(1000)
t.Error(f, ok)
if ok {
t.Error(f.Next().Value)
}
f, ok = avl.Floor(-1)
2019-02-13 10:02:01 +00:00
t.Error(f, ok)
2019-02-13 10:54:03 +00:00
if ok {
t.Error(f.Next().Value)
}
2019-02-13 18:42:14 +00:00
root := avl.Root
for root != nil {
root = root.Next()
}
root = avl.Root
for root != nil {
root = root.Prev()
}
2019-02-13 10:02:01 +00:00
}
func BenchmarkAVL(b *testing.B) {
2019-02-13 10:54:03 +00:00
avl := NewWithIntComparator()
2019-02-13 10:02:01 +00:00
b.N = 1000000
b.StartTimer()
for i := 0; i < b.N; i++ {
v := randomdata.Number(0, 100000000)
2019-02-13 18:42:14 +00:00
avl.Put(v)
2019-02-13 10:02:01 +00:00
}
for i := 0; i < b.N; i++ {
2019-02-13 18:42:14 +00:00
avl.Find(i)
2019-02-13 10:02:01 +00:00
}
b.StopTimer()
}
2019-01-31 10:39:17 +00:00
func TestHeap(t *testing.T) {
2019-02-13 10:02:01 +00:00
2019-01-31 10:39:17 +00:00
heap := binaryheap.NewWithIntComparator()
for i := 0; i < 10; i++ {
heap.Push(randomdata.Number(0, 1000))
}
t.Error(heap.Peek())
t.Error(heap.Values())
utils.Sort(heap.Values(), utils.IntComparator)
}
func BenchmarkList_InsertValues123(b *testing.B) {
a := func(v1, v2 interface{}) int {
if v1.(int) > v2.(int) {
return -1
}
return 1
}
h := binaryheap.NewWith(a)
TOPK := 50
for i := 0; i < TOPK*1000; i++ {
h.Push(i)
}
b.StartTimer()
for i := 0; i < b.N; i++ {
h.Push(i)
l := []interface{}{}
for n := 0; n < TOPK; n++ {
v, _ := h.Pop()
l = append(l, v)
}
for _, v := range l {
h.Push(v)
}
}
b.StopTimer()
2019-01-26 10:45:30 +00:00
}