Skip to content

Commit 7c9b0fb

Browse files
committed
add pytest tests
1 parent ecf859a commit 7c9b0fb

File tree

5 files changed

+697
-0
lines changed

5 files changed

+697
-0
lines changed

tests/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""
2+
NumpyDeque pytest functions for validation.
3+
"""
4+
5+
# Note: File is necessary for vscode to prevent a "pytest test discovery error for workspace"
6+
# If not present then the following error is raised:
7+
#
8+
# [error] Subprocess exited unsuccessfully with exit code 2 and signal null on workspace c:\XYZ\XYZ\XYZ\NumpyDeque.
9+
# [error] Subprocess exited unsuccessfully with exit code 2 and signal null on workspace c:\XYZ\XYZ\XYZ\NumpyDeque. Creating and sending error discovery payload
10+
# [error] pytest test discovery error for workspace: c:\XYZ\XYZ\XYZ\NumpyDeque
11+
#
12+
# The python test process was terminated before it could exit on its own, the process errored with: Code: 2, Signal: null for workspace c:\XYZ\XYZ\XYZ\NumpyDeque

tests/test_general_methods.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import pytest
2+
import numpy as np
3+
from NumpyDeque import NumpyDeque
4+
5+
6+
@pytest.fixture
7+
def empty_deque():
8+
return NumpyDeque(maxsize=5)
9+
10+
11+
@pytest.fixture
12+
def filled_deque():
13+
return NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5)
14+
15+
16+
def test_buffer_shift():
17+
array_like = [1, 2, 3, 4, 5]
18+
d = NumpyDeque.array(array_like, priority="rightonly", _force_buffer_size=10)
19+
assert d._s == 0 # buffer shift index
20+
assert len(d) == 5
21+
assert d.buffer_size == 10
22+
assert d.maxsize == 5
23+
for i in range(6, 11):
24+
d.put(i)
25+
d.put(11) # shift occurs
26+
assert d._i == d._s
27+
assert np.all(d.deque == np.array([7, 8, 9, 10, 11]))
28+
for i in range(6):
29+
d.putleft(i) # shift occurs always
30+
assert d._i == d._s
31+
assert np.all(d.deque == np.array([5, 4, 3, 2, 1]))
32+
33+
array_like = [1, 2, 3, 4, 5]
34+
d = NumpyDeque.array(array_like, priority="right", _force_buffer_size=10)
35+
assert d._s == 1 # buffer shift index
36+
assert len(d) == 5
37+
assert d.buffer_size == 10
38+
assert d.maxsize == 5
39+
for i in range(6, 10):
40+
d.put(i)
41+
d.put(10) # shift occurs
42+
assert d._i == d._s
43+
assert np.all(d.deque == np.array([6, 7, 8, 9, 10]))
44+
d.putleft(0)
45+
d.putleft(1) # shift occurs
46+
assert d._i == d._s
47+
assert np.all(d.deque == np.array([1, 0, 6, 7, 8]))
48+
49+
d = NumpyDeque.array(array_like, priority="left", _force_buffer_size=10)
50+
assert d._s == 3 # buffer shift index
51+
assert len(d) == 5
52+
assert d.buffer_size == 10
53+
assert d.maxsize == 5
54+
for i in range(6, 8):
55+
d.put(i) # shift occurs
56+
d.put(8) # shift occurs
57+
assert d._i == d._s
58+
assert np.all(d.deque == np.array([4, 5, 6, 7, 8]))
59+
for i in range(3):
60+
d.putleft(i)
61+
d.putleft(3) # shift occurs
62+
assert d._i == d._s
63+
assert np.all(d.deque == np.array([3, 2, 1, 0, 4]))
64+
65+
d = NumpyDeque.array(array_like, priority="leftonly", _force_buffer_size=10)
66+
assert d._s == 5 # buffer shift index
67+
assert len(d) == 5
68+
assert d.buffer_size == 10
69+
assert d.maxsize == 5
70+
for i in range(6, 11):
71+
d.put(i) # shift occurs always
72+
d.put(11) # shift occurs
73+
assert d._i == d._s
74+
assert np.all(d.deque == np.array([7, 8, 9, 10, 11]))
75+
for i in range(5):
76+
d.putleft(i)
77+
d.putleft(5) # shift occurs
78+
assert d._i == d._s
79+
assert np.all(d.deque == np.array([5, 4, 3, 2, 1]))
80+
81+
82+
def test_invalid_priority():
83+
with pytest.raises(ValueError):
84+
NumpyDeque(maxsize=5, priority="invalid")
85+
86+
87+
def test_clear(filled_deque):
88+
filled_deque.clear()
89+
assert len(filled_deque) == 0
90+
91+
92+
def test_copy(filled_deque):
93+
copied_deque = filled_deque.copy()
94+
assert len(copied_deque) == len(filled_deque)
95+
assert np.array_equal(copied_deque.deque, filled_deque.deque)
96+
assert copied_deque is not filled_deque
97+
98+
99+
def test_reverse(filled_deque):
100+
filled_deque.reverse()
101+
assert np.array_equal(filled_deque.deque, [5, 4, 3, 2, 1])
102+
103+
104+
def test_abs():
105+
d = NumpyDeque.array([-1, -2, 3, -4, 5], maxsize=5)
106+
d.abs()
107+
assert np.array_equal(d.deque, [1, 2, 3, 4, 5])
108+
109+
110+
def test_sort():
111+
d = NumpyDeque.array([3, 1, 4, 2, 5], maxsize=5)
112+
d.sort()
113+
assert np.array_equal(d.deque, [1, 2, 3, 4, 5])

tests/test_initialization.py

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
from NumpyDeque import NumpyDeque
2+
import numpy as np
3+
4+
5+
def test_initialization_array():
6+
array_like = [1, 2, 3, 4, 5]
7+
d = NumpyDeque.array(array_like)
8+
assert len(d) == 5
9+
assert d.maxsize == 5
10+
assert np.all(d.deque == np.array(array_like))
11+
12+
d = NumpyDeque.array(array_like, maxsize=10)
13+
assert len(d) == 5
14+
assert d.maxsize == 10
15+
assert np.all(d.deque == np.array(array_like))
16+
17+
18+
def test_empty_initialization():
19+
d = NumpyDeque(maxsize=10)
20+
assert len(d) == 0
21+
assert d.maxsize == 10
22+
assert len(d.deque) == 0
23+
24+
d = NumpyDeque(maxsize=100)
25+
assert len(d) == 0
26+
assert d.maxsize == 100
27+
assert len(d.deque) == 0
28+
29+
30+
def test_fill_initialization():
31+
d = NumpyDeque(maxsize=10, fill=1)
32+
assert len(d) == 10
33+
assert d.maxsize == 10
34+
assert np.all(d.deque == 1)
35+
assert len(d.deque) == 10
36+
37+
d = NumpyDeque(maxsize=100, fill=2)
38+
assert len(d) == 100
39+
assert d.maxsize == 100
40+
assert np.all(d.deque == 2)
41+
assert len(d.deque) == 100
42+
43+
44+
def test_int64_initialization():
45+
d = NumpyDeque(maxsize=10, dtype=np.int64)
46+
assert d.dtype == np.int64
47+
assert len(d) == 0
48+
assert d.maxsize == 10
49+
assert len(d.deque) == 0
50+
51+
d = NumpyDeque(maxsize=100, dtype=np.int64)
52+
assert d.dtype == np.int64
53+
assert len(d) == 0
54+
assert d.maxsize == 100
55+
assert len(d.deque) == 0
56+
57+
d = NumpyDeque(maxsize=10, fill=1, dtype=np.int64)
58+
assert d.dtype == np.int64
59+
assert len(d) == 10
60+
assert d.maxsize == 10
61+
assert np.all(d.deque == 1)
62+
assert len(d.deque) == 10
63+
64+
d = NumpyDeque(maxsize=100, fill=2, dtype=np.int64)
65+
assert d.dtype == np.int64
66+
assert len(d) == 100
67+
assert d.maxsize == 100
68+
assert np.all(d.deque == 2)
69+
assert len(d.deque) == 100
70+
71+
72+
def test_float64_initialization():
73+
d = NumpyDeque(maxsize=10, dtype=np.float64)
74+
assert d.dtype == np.float64
75+
assert len(d) == 0
76+
assert d.maxsize == 10
77+
assert len(d.deque) == 0
78+
79+
d = NumpyDeque(maxsize=100, dtype=np.float64)
80+
assert d.dtype == np.float64
81+
assert len(d) == 0
82+
assert d.maxsize == 100
83+
assert len(d.deque) == 0
84+
85+
d = NumpyDeque(maxsize=10, fill=1, dtype=np.float64)
86+
assert d.dtype == np.float64
87+
assert len(d) == 10
88+
assert d.maxsize == 10
89+
assert np.all(d.deque == 1.0)
90+
assert len(d.deque) == 10
91+
92+
d = NumpyDeque(maxsize=100, fill=2, dtype=np.float64)
93+
assert d.dtype == np.float64
94+
assert len(d) == 100
95+
assert d.maxsize == 100
96+
assert np.all(d.deque == 2.0)
97+
assert len(d.deque) == 100
98+
99+
100+
def test_pad_initialization():
101+
siz = 10
102+
pad = 10
103+
d = NumpyDeque(maxsize=siz, buffer_padding=pad)
104+
assert d.buffer_size >= siz + 2 * pad
105+
assert len(d) == 0
106+
assert d.maxsize == siz
107+
108+
siz = 100
109+
pad = 10
110+
d = NumpyDeque(maxsize=siz, buffer_padding=pad)
111+
assert d.buffer_size >= siz + 2 * pad
112+
assert len(d) == 0
113+
assert d.maxsize == siz
114+
115+
siz = 10
116+
pad = 100
117+
d = NumpyDeque(maxsize=siz, buffer_padding=pad)
118+
assert d.buffer_size >= siz + 2 * pad
119+
assert len(d) == 0
120+
assert d.maxsize == siz
121+
122+
siz = 100
123+
pad = 100
124+
d = NumpyDeque(maxsize=siz, buffer_padding=pad)
125+
assert d.buffer_size >= siz + 2 * pad
126+
assert len(d) == 0
127+
assert d.maxsize == siz
128+
129+
siz = 10
130+
pad = 10
131+
d = NumpyDeque(maxsize=siz, fill=1, buffer_padding=pad)
132+
assert d.buffer_size >= siz + 2 * pad
133+
assert len(d) == siz
134+
assert d.maxsize == siz
135+
assert np.all(d.deque == 1)
136+
137+
siz = 100
138+
pad = 10
139+
d = NumpyDeque(maxsize=siz, fill=2, buffer_padding=pad)
140+
assert d.buffer_size >= siz + 2 * pad
141+
assert len(d) == siz
142+
assert d.maxsize == siz
143+
assert np.all(d.deque == 2)
144+
145+
siz = 10
146+
pad = 100
147+
d = NumpyDeque(maxsize=siz, fill=1, buffer_padding=pad)
148+
assert d.buffer_size >= siz + 2 * pad
149+
assert len(d) == siz
150+
assert d.maxsize == siz
151+
assert np.all(d.deque == 1)
152+
153+
siz = 100
154+
pad = 100
155+
d = NumpyDeque(maxsize=siz, fill=2, buffer_padding=pad)
156+
assert d.buffer_size >= siz + 2 * pad
157+
assert len(d) == siz
158+
assert d.maxsize == siz
159+
assert np.all(d.deque == 2)
160+
161+
162+
def test_priority_initialization():
163+
d = NumpyDeque(maxsize=10, priority="right")
164+
assert len(d) == 0
165+
assert d.maxsize == 10
166+
assert len(d.deque) == 0
167+
168+
d = NumpyDeque(maxsize=10, fill=1, priority="right")
169+
assert len(d) == 10
170+
assert d.maxsize == 10
171+
assert np.all(d.deque == 1)
172+
assert len(d.deque) == 10
173+
174+
d = NumpyDeque(maxsize=100, priority="right")
175+
assert len(d) == 0
176+
assert d.maxsize == 100
177+
assert len(d.deque) == 0
178+
179+
d = NumpyDeque(maxsize=100, fill=1, priority="right")
180+
assert len(d) == 100
181+
assert d.maxsize == 100
182+
assert np.all(d.deque == 1)
183+
assert len(d.deque) == 100
184+
185+
d = NumpyDeque(maxsize=10, priority="rightonly")
186+
assert len(d) == 0
187+
assert d.maxsize == 10
188+
assert len(d.deque) == 0
189+
190+
d = NumpyDeque(maxsize=10, fill=1, priority="rightonly")
191+
assert len(d) == 10
192+
assert d.maxsize == 10
193+
assert np.all(d.deque == 1)
194+
assert len(d.deque) == 10
195+
196+
d = NumpyDeque(maxsize=100, priority="rightonly")
197+
assert len(d) == 0
198+
assert d.maxsize == 100
199+
assert len(d.deque) == 0
200+
201+
d = NumpyDeque(maxsize=100, fill=1, priority="rightonly")
202+
assert len(d) == 100
203+
assert d.maxsize == 100
204+
assert np.all(d.deque == 1)
205+
assert len(d.deque) == 100
206+
207+
d = NumpyDeque(maxsize=10, priority="left")
208+
assert len(d) == 0
209+
assert d.maxsize == 10
210+
assert len(d.deque) == 0
211+
212+
d = NumpyDeque(maxsize=10, fill=1, priority="left")
213+
assert len(d) == 10
214+
assert d.maxsize == 10
215+
assert np.all(d.deque == 1)
216+
assert len(d.deque) == 10
217+
218+
d = NumpyDeque(maxsize=100, priority="left")
219+
assert len(d) == 0
220+
assert d.maxsize == 100
221+
assert len(d.deque) == 0
222+
223+
d = NumpyDeque(maxsize=100, fill=1, priority="left")
224+
assert len(d) == 100
225+
assert d.maxsize == 100
226+
assert np.all(d.deque == 1)
227+
assert len(d.deque) == 100
228+
229+
d = NumpyDeque(maxsize=10, priority="leftonly")
230+
assert len(d) == 0
231+
assert d.maxsize == 10
232+
assert len(d.deque) == 0
233+
234+
d = NumpyDeque(maxsize=10, fill=1, priority="leftonly")
235+
assert len(d) == 10
236+
assert d.maxsize == 10
237+
assert np.all(d.deque == 1)
238+
assert len(d.deque) == 10
239+
240+
d = NumpyDeque(maxsize=100, priority="leftonly")
241+
assert len(d) == 0
242+
assert d.maxsize == 100
243+
assert len(d.deque) == 0
244+
245+
d = NumpyDeque(maxsize=100, fill=1, priority="leftonly")
246+
assert len(d) == 100
247+
assert d.maxsize == 100
248+
assert np.all(d.deque == 1)
249+
assert len(d.deque) == 100

0 commit comments

Comments
 (0)