Skip to content

Commit 9b1c8ec

Browse files
committed
Tests for expanded deque functionality
1 parent 0a3bf13 commit 9b1c8ec

File tree

4 files changed

+147
-10
lines changed

4 files changed

+147
-10
lines changed

tests/basics/deque1.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,52 @@
6363
~d
6464
except TypeError:
6565
print("TypeError")
66+
67+
68+
# Same tests, but now with pop() and appendleft()
69+
70+
d = deque((), 2)
71+
print(len(d))
72+
print(bool(d))
73+
74+
try:
75+
d.popleft()
76+
except IndexError:
77+
print("IndexError")
78+
79+
print(d.append(1))
80+
print(len(d))
81+
print(bool(d))
82+
print(d.popleft())
83+
print(len(d))
84+
85+
d.append(2)
86+
print(d.popleft())
87+
88+
d.append(3)
89+
d.append(4)
90+
print(len(d))
91+
print(d.popleft(), d.popleft())
92+
try:
93+
d.popleft()
94+
except IndexError:
95+
print("IndexError")
96+
97+
d.append(5)
98+
d.append(6)
99+
d.append(7)
100+
print(len(d))
101+
print(d.popleft(), d.popleft())
102+
print(len(d))
103+
try:
104+
d.popleft()
105+
except IndexError:
106+
print("IndexError")
107+
108+
d = deque((), 2)
109+
d.appendleft(1)
110+
d.appendleft(2)
111+
d.appendleft(3)
112+
d.appendleft(4)
113+
d.appendleft(5)
114+
print(d.pop(), d.pop())

tests/basics/deque2.py

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,50 @@
66
print("SKIP")
77
raise SystemExit
88

9+
# Initial sequence is supported
10+
d = deque([1, 2, 3], 10)
11+
12+
# iteration over sequence
13+
for x in d:
14+
print(x)
15+
16+
# Iterables larger than maxlen have the beginnings removed, also tests
17+
# iteration through conversion to list
18+
d = deque([1, 2, 3, 4, 5], 3)
19+
print(list(d))
20+
21+
# Empty iterables are also supported
22+
deque([], 10)
23+
24+
# Extending deques with iterables
25+
d.extend([6, 7])
26+
print(list(d))
27+
28+
# Accessing queue elements via index
29+
d = deque((0, 1, 2, 3), 5)
30+
print(d[0], d[1], d[-1])
31+
32+
# Writing queue elements via index
33+
d[3] = 5
34+
print(d[3])
35+
36+
# Accessing indices out of bounds raises IndexError
37+
try:
38+
d[4]
39+
except IndexError:
40+
print("IndexError")
941

10-
# Initial sequence is not supported
1142
try:
12-
deque([1, 2, 3], 10)
13-
except ValueError:
14-
print("ValueError")
43+
d[4] = 0
44+
except IndexError:
45+
print("IndexError")
1546

16-
# Not even empty list, only empty tuple
47+
# Removing elements with del is not supported, fall back on mp_obj_subscr() error message
1748
try:
18-
deque([], 10)
19-
except ValueError:
20-
print("ValueError")
49+
del d[0]
50+
except TypeError:
51+
print("TypeError")
52+
2153

2254
# Only fixed-size deques are supported, so length arg is mandatory
2355
try:
@@ -32,6 +64,11 @@
3264
except IndexError:
3365
print("IndexError")
3466

67+
try:
68+
d.pop()
69+
except IndexError:
70+
print("IndexError")
71+
3572
print(d.append(1))
3673
print(d.popleft())
3774

@@ -46,13 +83,24 @@
4683
except IndexError as e:
4784
print(repr(e))
4885

86+
try:
87+
d.pop()
88+
except IndexError as e:
89+
print(repr(e))
90+
4991
d.append(5)
5092
d.append(6)
5193
print(len(d))
5294
try:
5395
d.append(7)
5496
except IndexError as e:
5597
print(repr(e))
98+
99+
try:
100+
d.appendleft(8)
101+
except IndexError as e:
102+
print(repr(e))
103+
56104
print(len(d))
57105

58106
print(d.popleft(), d.popleft())

tests/basics/deque2.py.exp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
1-
ValueError
2-
ValueError
1+
1
2+
2
3+
3
4+
[3, 4, 5]
5+
[5, 6, 7]
6+
0 1 3
7+
5
8+
IndexError
9+
IndexError
310
TypeError
11+
TypeError
12+
IndexError
413
IndexError
514
None
615
1
716
2
817
3 4
918
IndexError('empty',)
19+
IndexError('empty',)
1020
2
1121
IndexError('full',)
22+
IndexError('full',)
1223
2
1324
5 6
1425
0

tests/basics/deque_slice.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
try:
2+
from collections import deque
3+
except ImportError:
4+
print("SKIP")
5+
raise SystemExit
6+
7+
d = deque((), 10)
8+
9+
d.append(1)
10+
d.append(2)
11+
d.append(3)
12+
13+
# Index slicing for reads is not supported in CPython
14+
try:
15+
d[0:1]
16+
except TypeError:
17+
print("TypeError")
18+
19+
# Index slicing for writes is not supported in CPython
20+
try:
21+
d[0:1] = (-1, -2)
22+
except TypeError:
23+
print("TypeError")
24+
25+
# Index slicing for writes is not supported in CPython
26+
try:
27+
del d[0:1]
28+
except TypeError:
29+
print("TypeError")

0 commit comments

Comments
 (0)