You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2016/12/08 18:46:16 UTC
[14/20] incubator-trafficcontrol git commit: Add TM2 heap_test.go
Add TM2 heap_test.go
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/34c0b4f8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/34c0b4f8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/34c0b4f8
Branch: refs/heads/master
Commit: 34c0b4f84ea6a472071d03db39ed5fe6b018fdca
Parents: c3ab47d
Author: Robert Butts <ro...@gmail.com>
Authored: Wed Dec 7 14:06:02 2016 -0700
Committer: Dave Neuman <ne...@apache.org>
Committed: Thu Dec 8 11:44:33 2016 -0700
----------------------------------------------------------------------
.../experimental/common/poller/heap_test.go | 143 +++++++++++++++++++
1 file changed, 143 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34c0b4f8/traffic_monitor/experimental/common/poller/heap_test.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/common/poller/heap_test.go b/traffic_monitor/experimental/common/poller/heap_test.go
new file mode 100644
index 0000000..ada593d
--- /dev/null
+++ b/traffic_monitor/experimental/common/poller/heap_test.go
@@ -0,0 +1,143 @@
+package poller
+
+import (
+ "fmt"
+ "math/rand"
+ "testing"
+ "time"
+)
+
+func TestHeap(t *testing.T) {
+ h := &Heap{}
+
+ num := 100
+ for i := 0; i < num; i++ {
+ h.Push(HeapPollInfo{
+ Info: HTTPPollInfo{
+ Interval: time.Second * time.Duration(8),
+ ID: fmt.Sprintf("%v", i),
+ },
+ Next: time.Now().Add(time.Second * time.Duration(i)), // time.Duration((i%2)*-1)
+ })
+ }
+
+ for i := 0; i < num; i++ {
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if val.Info.ID != fmt.Sprintf("%v", i) {
+ t.Errorf("expected pop ID %v got %v next %v", i, val.Info.ID, val.Next)
+ }
+ }
+}
+
+func TestHeapRandom(t *testing.T) {
+ h := &Heap{}
+
+ num := 10
+ for i := 0; i < num; i++ {
+ h.Push(HeapPollInfo{
+ Info: HTTPPollInfo{
+ Interval: time.Second * time.Duration(8),
+ ID: fmt.Sprintf("%v", i),
+ },
+ Next: time.Now().Add(time.Duration(rand.Int63())),
+ })
+ }
+
+ previousTime := time.Now()
+ for i := 0; i < num; i++ {
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if previousTime.After(val.Next) {
+ t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+ }
+ previousTime = val.Next
+ }
+}
+
+func TestHeapRandomPopping(t *testing.T) {
+ h := &Heap{}
+
+ randInfo := func(id int) HeapPollInfo {
+ return HeapPollInfo{
+ Info: HTTPPollInfo{
+ Interval: time.Second * time.Duration(8),
+ ID: fmt.Sprintf("%v", id),
+ },
+ Next: time.Now().Add(time.Duration(rand.Int63())),
+ }
+ }
+
+ num := 10
+ for i := 0; i < num; i++ {
+ h.Push(randInfo(i))
+ }
+
+ previousTime := time.Now()
+ for i := 0; i < num/2; i++ {
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if previousTime.After(val.Next) {
+ t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+ }
+ previousTime = val.Next
+ }
+
+ for i := 0; i < num; i++ {
+ h.Push(randInfo(i))
+ }
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop, got empty heap")
+ } else {
+ previousTime = val.Next
+ }
+
+ for i := 0; i < num; i++ {
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if previousTime.After(val.Next) {
+ t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+ }
+ previousTime = val.Next
+ }
+
+ for i := 0; i < num; i++ {
+ h.Push(randInfo(i))
+ }
+ val, ok = h.Pop()
+ if !ok {
+ t.Errorf("expected pop, got empty heap")
+ } else {
+ previousTime = val.Next
+ }
+
+ for i := 0; i < num; i++ {
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if previousTime.After(val.Next) {
+ t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+ }
+ previousTime = val.Next
+ }
+
+ for i := 0; i < num/2-2; i++ { // -2 for the two we manually popped in order to get the max
+ val, ok := h.Pop()
+ if !ok {
+ t.Errorf("expected pop ID %v got empty heap", i)
+ } else if previousTime.After(val.Next) {
+ t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+ }
+ previousTime = val.Next
+ }
+
+ val, ok = h.Pop()
+ if ok {
+ t.Errorf("expected empty, got %+v", val)
+ }
+}