-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathq_test.go
117 lines (84 loc) · 2.34 KB
/
q_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// queue test
package utils
import (
"testing"
)
// Basic sanity tests
func TestBasic(t *testing.T) {
assert := newAsserter(t)
var v bool
q := NewQ[int](3)
assert(q.IsEmpty(), "expected q to be empty")
assert(!q.IsFull(), "expected q to not be full")
v = q.Enq(10)
assert(v, "enq-10 failed")
v = q.Enq(20)
assert(v, "enq-20 failed")
v = q.Enq(30)
assert(v, "enq-30 failed")
assert(q.IsFull(), "expected q to be full")
assert(!q.IsEmpty(), "expected q to not be empty")
assert(q.Len() == 3, "qsize exp 3, saw %d", q.Len())
// Now q will be full
v = q.Enq(40)
assert(!v, "enq-4 should have failed")
// Pull items off the queue
z, v := q.Deq()
assert(v, "deq-0 failed")
assert(z == 10, "deq-0 value mismatch, exp 10, saw %d", z)
z, v = q.Deq()
assert(v, "deq-1 failed")
assert(z == 20, "deq-1 value mismatch, exp 20, saw %d", z)
z, v = q.Deq()
assert(v, "deq-2 failed")
assert(z == 30, "deq-2 value mismatch, exp 30, saw %d", z)
assert(q.IsEmpty(), "expected q to be empty")
z, v = q.Deq()
assert(!v, "expected deq to fail")
}
// Test wrap around
func TestWrapAround(t *testing.T) {
assert := newAsserter(t)
var v bool
q := NewQ[int](3)
assert(q.Size() == 3, "Q size exp 3, saw %d", q.Size())
v = q.Enq(10)
assert(v, "enq-10 failed")
v = q.Enq(20)
assert(v, "enq-20 failed")
v = q.Enq(30)
assert(v, "enq-30 failed")
assert(q.IsFull(), "expected q to be full")
assert(!q.IsEmpty(), "expected q to not be empty")
assert(q.Len() == 3, "qsize exp 3, saw %d", q.Len())
z, v := q.Deq()
assert(v, "deq-0 failed")
assert(z == 10, "deq-0 value mismatch, exp 10, saw %d", z)
z, v = q.Deq()
assert(v, "deq-1 failed")
assert(z == 20, "deq-1 value mismatch, exp 20, saw %d", z)
// This will wrap around
v = q.Enq(40)
assert(v, "enq-40 failed")
v = q.Enq(50)
assert(v, "enq-50 failed")
assert(q.Len() == 3, "q size mismatch, exp 3, saw %d", q.Len())
}
// Test wrap around
func TestWithInitialData(t *testing.T) {
assert := newAsserter(t)
var z = [...]int{
33,
44,
55,
}
q := NewQFrom[int](z[:])
assert(q.Len() == len(z), "initial q-size: exp %d, saw %d", len(z), q.Len())
assert(q.IsFull(), "expected q to be full")
for i, v := range z {
a, ok := q.Deq()
assert(ok, "deq-%d failed; exp success", i)
assert(a == v, "deq-%d: exp %d, saw %d", i, v, a)
}
assert(q.IsEmpty(), "expected q to be empty")
}