aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-05-08 23:19:53 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-05-08 23:19:53 +0800
commit0214cbe0fb01e623a905a6ff8875896f78e00840 (patch)
tree0b9227ca5be01d6b667dd2651771b08d8f75499d /Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go
parent7c678554b585b70d5498442bc7122e3091ace80f (diff)
parentedad47bf0e68ad02ee0cb6efd776c9f9be67ad8e (diff)
downloadgo-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar.gz
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar.bz2
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar.lz
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar.xz
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.tar.zst
go-tangerine-0214cbe0fb01e623a905a6ff8875896f78e00840.zip
Merge pull request #863 from karalabe/ordered-block-download
eth/downloader: prioritize block fetch based on chain position, cap memo...
Diffstat (limited to 'Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go')
-rw-r--r--Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go139
1 files changed, 139 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go b/Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go
new file mode 100644
index 000000000..daba691e1
--- /dev/null
+++ b/Godeps/_workspace/src/gopkg.in/karalabe/cookiejar.v2/collections/prque/prque_test.go
@@ -0,0 +1,139 @@
+// CookieJar - A contestant's algorithm toolbox
+// Copyright (c) 2013 Peter Szilagyi. All rights reserved.
+//
+// CookieJar is dual licensed: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// The toolbox is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// Alternatively, the CookieJar toolbox may be used in accordance with the terms
+// and conditions contained in a signed written agreement between you and the
+// author(s).
+
+package prque
+
+import (
+ "math/rand"
+ "testing"
+)
+
+func TestPrque(t *testing.T) {
+ // Generate a batch of random data and a specific priority order
+ size := 16 * blockSize
+ prio := rand.Perm(size)
+ data := make([]int, size)
+ for i := 0; i < size; i++ {
+ data[i] = rand.Int()
+ }
+ queue := New()
+ for rep := 0; rep < 2; rep++ {
+ // Fill a priority queue with the above data
+ for i := 0; i < size; i++ {
+ queue.Push(data[i], float32(prio[i]))
+ if queue.Size() != i+1 {
+ t.Errorf("queue size mismatch: have %v, want %v.", queue.Size(), i+1)
+ }
+ }
+ // Create a map the values to the priorities for easier verification
+ dict := make(map[float32]int)
+ for i := 0; i < size; i++ {
+ dict[float32(prio[i])] = data[i]
+ }
+ // Pop out the elements in priority order and verify them
+ prevPrio := float32(size + 1)
+ for !queue.Empty() {
+ val, prio := queue.Pop()
+ if prio > prevPrio {
+ t.Errorf("invalid priority order: %v after %v.", prio, prevPrio)
+ }
+ prevPrio = prio
+ if val != dict[prio] {
+ t.Errorf("push/pop mismatch: have %v, want %v.", val, dict[prio])
+ }
+ delete(dict, prio)
+ }
+ }
+}
+
+func TestReset(t *testing.T) {
+ // Generate a batch of random data and a specific priority order
+ size := 16 * blockSize
+ prio := rand.Perm(size)
+ data := make([]int, size)
+ for i := 0; i < size; i++ {
+ data[i] = rand.Int()
+ }
+ queue := New()
+ for rep := 0; rep < 2; rep++ {
+ // Fill a priority queue with the above data
+ for i := 0; i < size; i++ {
+ queue.Push(data[i], float32(prio[i]))
+ if queue.Size() != i+1 {
+ t.Errorf("queue size mismatch: have %v, want %v.", queue.Size(), i+1)
+ }
+ }
+ // Create a map the values to the priorities for easier verification
+ dict := make(map[float32]int)
+ for i := 0; i < size; i++ {
+ dict[float32(prio[i])] = data[i]
+ }
+ // Pop out half the elements in priority order and verify them
+ prevPrio := float32(size + 1)
+ for i := 0; i < size/2; i++ {
+ val, prio := queue.Pop()
+ if prio > prevPrio {
+ t.Errorf("invalid priority order: %v after %v.", prio, prevPrio)
+ }
+ prevPrio = prio
+ if val != dict[prio] {
+ t.Errorf("push/pop mismatch: have %v, want %v.", val, dict[prio])
+ }
+ delete(dict, prio)
+ }
+ // Reset and ensure it's empty
+ queue.Reset()
+ if !queue.Empty() {
+ t.Errorf("priority queue not empty after reset: %v", queue)
+ }
+ }
+}
+
+func BenchmarkPush(b *testing.B) {
+ // Create some initial data
+ data := make([]int, b.N)
+ prio := make([]float32, b.N)
+ for i := 0; i < len(data); i++ {
+ data[i] = rand.Int()
+ prio[i] = rand.Float32()
+ }
+ // Execute the benchmark
+ b.ResetTimer()
+ queue := New()
+ for i := 0; i < len(data); i++ {
+ queue.Push(data[i], prio[i])
+ }
+}
+
+func BenchmarkPop(b *testing.B) {
+ // Create some initial data
+ data := make([]int, b.N)
+ prio := make([]float32, b.N)
+ for i := 0; i < len(data); i++ {
+ data[i] = rand.Int()
+ prio[i] = rand.Float32()
+ }
+ queue := New()
+ for i := 0; i < len(data); i++ {
+ queue.Push(data[i], prio[i])
+ }
+ // Execute the benchmark
+ b.ResetTimer()
+ for !queue.Empty() {
+ queue.Pop()
+ }
+}