Skip to content

Commit 04170e3

Browse files
committed
Improve LRUDict test coverage/quality
1 parent 25936fc commit 04170e3

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

pybamm/solvers/lrudict.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ def __getitem__(self, key):
2121
try:
2222
self.move_to_end(key, last=True)
2323
except KeyError:
24-
pass
24+
pass # Allow parent to handle exception
2525
return super().__getitem__(key)
2626

2727
def get(self, key):
2828
try:
2929
self.move_to_end(key, last=True)
3030
except KeyError:
31-
pass
31+
pass # Allow parent to handle exception
3232
return super().get(key)

tests/unit/test_solvers/test_lrudict.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ def test_lrudict_defaultbehaviour(self):
1818
# LRU will reorder list, but not remove entries
1919
d.get(count - 2)
2020
dd.get(count - 2)
21-
assert set(d.keys()) == set(dd.keys())
22-
assert set(d.values()) == set(dd.values())
21+
# assertCountEqual checks that the same elements are present in
22+
# both lists, not just that the lists are of equal count
23+
self.assertCountEqual(set(d.keys()), set(dd.keys()))
24+
self.assertCountEqual(set(d.values()), set(dd.values()))
2325

2426
def test_lrudict_noitems(self):
2527
"""Edge case: no items in LRU, raises KeyError on assignment"""
@@ -28,16 +30,17 @@ def test_lrudict_noitems(self):
2830
d["a"] = 1
2931

3032
def test_lrudict_singleitem(self):
31-
"""Only the last added element should be present"""
33+
"""Only the last added element should ever be present"""
3234
d = LRUDict(maxsize=1)
3335
item_list = range(1, 100)
34-
assert len(d) == 0
36+
self.assertEqual(len(d), 0)
3537
for item in item_list:
3638
d[item] = item
37-
assert len(d) == 1
38-
assert d[item]
39+
self.assertEqual(len(d), 1)
40+
self.assertIsNotNone(d[item])
41+
# Finally, pop the only item and check that the dictionary is empty
3942
d.popitem()
40-
assert len(d) == 0
43+
self.assertEqual(len(d), 0)
4144

4245
def test_lrudict_multiitem(self):
4346
"""Check that the correctly ordered items are always present"""
@@ -56,5 +59,17 @@ def test_lrudict_multiitem(self):
5659
expected = OrderedDict(
5760
(k, expected[k]) for k in list(expected.keys())[-maxsize:]
5861
)
59-
assert list(d.keys()) == list(expected.keys())
60-
assert list(d.values()) == list(expected.values())
62+
self.assertListEqual(list(d.keys()), list(expected.keys()))
63+
self.assertListEqual(list(d.values()), list(expected.values()))
64+
65+
def test_lrudict_invalidkey(self):
66+
d = LRUDict()
67+
value = 1
68+
d["a"] = value
69+
# Access with valid key
70+
self.assertEqual(d["a"], value) # checks getitem()
71+
self.assertEqual(d.get("a"), value) # checks get()
72+
# Access with invalid key
73+
with self.assertRaises(KeyError):
74+
_ = d["b"] # checks getitem()
75+
self.assertIsNone(d.get("b")) # checks get()

0 commit comments

Comments
 (0)