-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathArrayMap_test.py
More file actions
161 lines (131 loc) · 5.69 KB
/
ArrayMap_test.py
File metadata and controls
161 lines (131 loc) · 5.69 KB
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import pytest
from selfie_lib.ArrayMap import ArrayMap
def assertEmpty(undertest):
assert len(undertest) == 0
assert list(undertest.keys()) == []
assert list(undertest.values()) == []
assert list(undertest.items()) == []
with pytest.raises(KeyError):
_ = undertest["key"]
assert undertest == {}
assert undertest == ArrayMap.empty()
def assertSingle(undertest, key, value):
assert len(undertest) == 1
assert set(undertest.keys()) == {key}
assert list(undertest.values()) == [value]
assert set(undertest.items()) == {(key, value)}
assert undertest[key] == value
with pytest.raises(KeyError):
_ = undertest[key + "blah"]
assert undertest == {key: value}
assert undertest == ArrayMap.empty().plus(key, value)
def assertDouble(undertest, key1, value1, key2, value2):
assert len(undertest) == 2
assert set(undertest.keys()) == {key1, key2}
assert list(undertest.values()) == [value1, value2]
assert set(undertest.items()) == {(key1, value1), (key2, value2)}
assert undertest[key1] == value1
assert undertest[key2] == value2
with pytest.raises(KeyError):
_ = undertest[key1 + "blah"]
assert undertest == {key1: value1, key2: value2}
assert undertest == {key2: value2, key1: value1}
assert undertest == ArrayMap.empty().plus(key1, value1).plus(key2, value2)
assert undertest == ArrayMap.empty().plus(key2, value2).plus(key1, value1)
def assertTriple(undertest, key1, value1, key2, value2, key3, value3):
assert len(undertest) == 3
assert set(undertest.keys()) == {key1, key2, key3}
assert list(undertest.values()) == [value1, value2, value3]
assert set(undertest.items()) == {(key1, value1), (key2, value2), (key3, value3)}
assert undertest[key1] == value1
assert undertest[key2] == value2
assert undertest[key3] == value3
with pytest.raises(KeyError):
_ = undertest[key1 + "blah"]
assert undertest == {key1: value1, key2: value2, key3: value3}
assert undertest == ArrayMap.empty().plus(key1, value1).plus(key2, value2).plus(
key3, value3
)
def test_empty():
assertEmpty(ArrayMap.empty())
def test_single():
empty = ArrayMap.empty()
single = empty.plus("one", "1")
assertEmpty(empty)
assertSingle(single, "one", "1")
def test_double():
empty = ArrayMap.empty()
single = empty.plus("one", "1")
double = single.plus("two", "2")
assertEmpty(empty)
assertSingle(single, "one", "1")
assertDouble(double, "one", "1", "two", "2")
assertDouble(single.plus("a", "sorted"), "a", "sorted", "one", "1")
with pytest.raises(KeyError):
single.plus("one", "2")
def test_triple():
triple = ArrayMap.empty().plus("1", "one").plus("2", "two").plus("3", "three")
assertTriple(triple, "1", "one", "2", "two", "3", "three")
def test_multi():
test_triple() # Calling another test function directly is unusual but works
triple = ArrayMap.empty().plus("2", "two").plus("3", "three").plus("1", "one")
assertTriple(triple, "1", "one", "2", "two", "3", "three")
triple = ArrayMap.empty().plus("3", "three").plus("1", "one").plus("2", "two")
assertTriple(triple, "1", "one", "2", "two", "3", "three")
def test_minus_sorted_indices():
initial_map = (
ArrayMap.empty()
.plus("1", "one")
.plus("2", "two")
.plus("3", "three")
.plus("4", "four")
)
modified_map = initial_map.minus_sorted_indices([1, 3])
assert len(modified_map) == 2
assert list(modified_map.keys()) == ["1", "3"]
assert list(modified_map.values()) == ["one", "three"]
with pytest.raises(KeyError):
_ = modified_map["2"]
with pytest.raises(KeyError):
_ = modified_map["4"]
assert modified_map == {"1": "one", "3": "three"}
def test_plus_with_existing_keys():
map_with_duplicates = ArrayMap.empty().plus("a", "alpha").plus("b", "beta")
with pytest.raises(KeyError):
map_with_duplicates.plus("a", "new alpha")
updated_map = map_with_duplicates.plus("c", "gamma")
assert len(updated_map) == 3
assert updated_map["a"] == "alpha"
assert updated_map["b"] == "beta"
assert updated_map["c"] == "gamma"
modified_map = map_with_duplicates.minus_sorted_indices([0]).plus(
"a", "updated alpha"
)
assert len(modified_map) == 2
assert modified_map["a"] == "updated alpha"
assert modified_map["b"] == "beta"
def test_map_length():
undertest = ArrayMap.empty()
assert len(undertest) == 0, "Length should be 0 for an empty map"
undertest = undertest.plus("key1", "value1")
assert len(undertest) == 1, "Length should be 1 after adding one item"
undertest = undertest.plus("key2", "value2")
assert len(undertest) == 2, "Length should be 2 after adding another item"
undertest = undertest.plus("key3", "value3")
assert len(undertest) == 3, "Length should be 3 after adding a third item"
undertest = undertest.minus_sorted_indices([1])
assert len(undertest) == 2, "Length should be 2 after removing one item"
undertest = undertest.minus_sorted_indices([0])
assert len(undertest) == 1, "Length should be 1 after removing another item"
undertest = undertest.minus_sorted_indices([0])
assert len(undertest) == 0, "Length should be 0 after removing all items"
def test_keys():
assert ArrayMap.empty().keys().__len__() == 0
undertest = ArrayMap.empty().plus("a", "alpha").plus("b", "beta")
assert undertest.keys()[0] == "a"
assert undertest.keys()[1] == "b"
def test_items():
assert ArrayMap.empty().items().__len__() == 0
undertest = ArrayMap.empty().plus("a", "alpha").plus("b", "beta")
assert undertest.items()[0] == ("a", "alpha")
assert undertest.items()[1] == ("b", "beta")