Skip to content

Commit cd4190a

Browse files
committed
add test_slice_and_math_ops.py
1 parent eb38191 commit cd4190a

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

tests/test_slice_and_math_ops.py

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import pytest
2+
import numpy as np
3+
from NumpyDeque import NumpyDeque
4+
5+
6+
@pytest.fixture
7+
def filled_deque():
8+
return NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5)
9+
10+
11+
def test_pop_index(filled_deque):
12+
assert filled_deque[2] == 3
13+
filled_deque.pop()
14+
assert filled_deque[2] == 3
15+
filled_deque.pop()
16+
assert filled_deque[2] == 3
17+
filled_deque.pop()
18+
with pytest.raises(IndexError):
19+
filled_deque[2]
20+
assert (filled_deque == [1, 2]).all()
21+
22+
23+
def test_popleft_index(filled_deque):
24+
assert filled_deque[2] == 3
25+
filled_deque.popleft()
26+
assert filled_deque[2] == 4
27+
filled_deque.popleft()
28+
assert filled_deque[2] == 5
29+
filled_deque.popleft()
30+
with pytest.raises(IndexError):
31+
filled_deque[2]
32+
assert (filled_deque == [4, 5]).all()
33+
34+
35+
def test_slicing_boundaries():
36+
d = NumpyDeque(maxsize=5, dtype=np.int64)
37+
d.put(1)
38+
d.put(2)
39+
assert (d[0:10] == [1, 2]).all() # Slice beyond the current size should return available elements
40+
assert (d[-5:] == [1, 2]).all() # Negative slicing
41+
42+
43+
def test_equality():
44+
d1 = NumpyDeque(maxsize=5, dtype=np.int64)
45+
d2 = NumpyDeque(maxsize=5, dtype=np.int64)
46+
d1.put(1)
47+
d2.put(1)
48+
assert (d1 == d2).all()
49+
d2.put(2)
50+
assert (d1 != d2).any()
51+
52+
53+
def test_inplace_add_operations():
54+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5)
55+
d += 10
56+
assert len(d) == 5
57+
assert (d == [11, 12, 13, 14, 15]).all()
58+
59+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
60+
d += 10
61+
assert (d == [11, 12, 13, 14, 15]).all()
62+
63+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
64+
d.put(6)
65+
d += 10
66+
assert (d == [11, 12, 13, 14, 15, 16]).all()
67+
68+
69+
def test_inplace_subtract_operations():
70+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5)
71+
d -= 10
72+
assert len(d) == 5
73+
assert (d == [-9, -8, -7, -6, -5]).all()
74+
75+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
76+
d -= 10
77+
assert (d == [-9, -8, -7, -6, -5]).all()
78+
79+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
80+
d.put(6)
81+
d -= 10
82+
assert (d == [-9, -8, -7, -6, -5, -4]).all()
83+
84+
85+
def test_inplace_multiply_operations():
86+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5)
87+
d *= 10
88+
assert len(d) == 5
89+
assert (d == [10, 20, 30, 40, 50]).all()
90+
91+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
92+
d *= 10
93+
assert (d == [10, 20, 30, 40, 50]).all()
94+
95+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
96+
d.put(6)
97+
d *= 10
98+
assert (d == [10, 20, 30, 40, 50, 60]).all()
99+
100+
101+
def test_inplace_divide_operations():
102+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5, dtype=float)
103+
d /= 10
104+
assert (np.isclose(d, [0.1, 0.2, 0.3, 0.4, 0.5])).all()
105+
106+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5, dtype=int)
107+
with pytest.raises(Exception):
108+
d /= 10
109+
110+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
111+
d //= 10
112+
assert (d == [0, 0, 0, 0, 0]).all()
113+
114+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
115+
d.put(6)
116+
d //= 10
117+
assert (d == [0, 0, 0, 0, 0, 0]).all()
118+
119+
120+
def test_inplace_power_operations():
121+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5, dtype=float)
122+
d **= 2.5
123+
assert (np.isclose(d, [1.0, 5.656, 15.588, 32.0, 55.901], atol=0.001)).all()
124+
125+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=5, dtype=int)
126+
with pytest.raises(Exception):
127+
d **= 2.5
128+
129+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
130+
d **= 2
131+
assert (d == [1, 4, 9, 16, 25]).all()
132+
133+
d = NumpyDeque.array([1, 2, 3, 4, 5], maxsize=10)
134+
d.put(6)
135+
d **= 2
136+
assert (d == [1, 4, 9, 16, 25, 36]).all()

0 commit comments

Comments
 (0)