all repos

scratch @ cafea31

⭐ me doing recreational ~~drugs~~ programming

scratch/algos/queue_test.go (view raw)

1
package algos
2
3
import "testing"
4
5
func TestQueue(t *testing.T) {
6
	q := Queue[int]{}
7
8
	q.Push(5)
9
	q.Push(7)
10
	q.Push(9)
11
12
	v, ok := q.Pop()
13
	is(t, ok, true)
14
	is(t, v, 5)
15
16
	is(t, q.Len, 2)
17
18
	q.Push(11)
19
20
	v, ok = q.Pop()
21
	is(t, ok, true)
22
	is(t, v, 7)
23
24
	v, ok = q.Pop()
25
	is(t, ok, true)
26
	is(t, v, 9)
27
28
	is(t, q.Peek(), 11)
29
30
	v, ok = q.Pop()
31
	is(t, ok, true)
32
	is(t, v, 11)
33
34
	_, ok = q.Pop()
35
	is(t, ok, false)
36
37
	// everything works after removing all elements
38
	q.Push(69420)
39
	is(t, q.Peek(), 69420)
40
41
	v, ok = q.Pop()
42
	is(t, ok, true)
43
	is(t, v, 69420)
44
}
45
46
func TestRQueue(t *testing.T) {
47
	q := RQueue[int]{}
48
49
	q.Enqueue(5)
50
	q.Enqueue(7)
51
	q.Enqueue(9)
52
53
	v, ok := q.Dequeue()
54
	is(t, ok, true)
55
	is(t, v, 5)
56
57
	is(t, q.Len, 2)
58
59
	q.Enqueue(11)
60
61
	v, ok = q.Dequeue()
62
	is(t, ok, true)
63
	is(t, v, 7)
64
65
	v, ok = q.Dequeue()
66
	is(t, ok, true)
67
	is(t, v, 9)
68
69
	is(t, q.Peek(), 11)
70
71
	v, ok = q.Dequeue()
72
	is(t, ok, true)
73
	is(t, v, 11)
74
75
	_, ok = q.Dequeue()
76
	is(t, ok, false)
77
78
	// everything works after removing all elements
79
	q.Enqueue(69420)
80
	is(t, q.Peek(), 69420)
81
82
	v, ok = q.Dequeue()
83
	is(t, ok, true)
84
	is(t, v, 69420)
85
}
86
87
func BenchmarkQueue(b *testing.B) {
88
	q := &Queue[int]{}
89
	for range 256 {
90
		q.Push(1)
91
	}
92
93
	for b.Loop() {
94
		q.Push(1)
95
		q.Pop()
96
	}
97
}
98
99
func BenchmarkRQueue(b *testing.B) {
100
	q := &RQueue[int]{}
101
	for range 256 {
102
		q.Enqueue(1)
103
	}
104
105
	for b.Loop() {
106
		q.Enqueue(1)
107
		q.Dequeue()
108
	}
109
}
110
111
func is[T comparable](tb testing.TB, a, b T) {
112
	tb.Helper()
113
	if a != b {
114
		tb.Fatalf("%+v and %+v are not equal\n", a, b)
115
	}
116
}