Skip to content

Commit 8a54b57

Browse files
committed
Add missing tests (100% branch coverage!)
Found several bugs, too.
1 parent 4f59a0b commit 8a54b57

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

nmigen_soc/memory.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,9 @@ def _compute_addr_range(self, addr, size, step=1, *, alignment):
151151
overlap_descrs.append("resource {!r} at {:#x}..{:#x}"
152152
.format(overlap, resource_range.start, resource_range.stop))
153153
if overlap in self._windows:
154+
window_range = self._windows[overlap]
154155
overlap_descrs.append("window {!r} at {:#x}..{:#x}"
155-
.format(overlap, resource_range.start, resource_range.stop))
156+
.format(overlap, window_range.start, window_range.stop))
156157
raise ValueError("Address range {:#x}..{:#x} overlaps with {}"
157158
.format(addr, addr + size, ", ".join(overlap_descrs)))
158159

@@ -351,7 +352,7 @@ def all_resources(self):
351352
for sub_resource, sub_descr in assignment.all_resources():
352353
yield sub_resource, self._translate(*sub_descr, assignment, addr_range)
353354
else:
354-
assert False
355+
assert False # :nocov:
355356

356357
def find_resource(self, resource):
357358
"""Find address range corresponding to a resource.
@@ -409,4 +410,4 @@ def decode_address(self, address):
409410
addr_range = self._windows[assignment]
410411
return assignment.decode_address((address - addr_range.start) // addr_range.step)
411412
else:
412-
assert False
413+
assert False # :nocov:

nmigen_soc/test/test_csr_bus.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ def test_add_two(self):
110110
(2, 3))
111111

112112
def test_add_wrong(self):
113-
with self.assertRaisesRegex(ValueError,
114-
r"Width must be a non-negative integer, not -1"):
115-
Element(-1, "rw")
113+
with self.assertRaisesRegex(TypeError,
114+
r"Element must be an instance of csr\.Element, not 'foo'"):
115+
self.dut.add("foo")
116116

117117
def test_align_to(self):
118118
self.assertEqual(self.dut.add(Element(8, "rw")),
@@ -263,6 +263,13 @@ def setUp(self):
263263
self.dut = Decoder(addr_width=16, data_width=8)
264264
Fragment.get(self.dut, platform=None) # silence UnusedElaboratable
265265

266+
def test_align_to(self):
267+
self.assertEqual(self.dut.add(Interface(addr_width=10, data_width=8)),
268+
(0, 0x400, 1))
269+
self.assertEqual(self.dut.align_to(12), 0x1000)
270+
self.assertEqual(self.dut.add(Interface(addr_width=10, data_width=8)),
271+
(0x1000, 0x1400, 1))
272+
266273
def test_add_wrong_sub_bus(self):
267274
with self.assertRaisesRegex(TypeError,
268275
r"Subordinate bus must be an instance of csr\.Interface, not 1"):

nmigen_soc/test/test_memory.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,23 @@ def test_add_window_wrong_ratio(self):
181181
r"16 is not an integer multiple of window data width 7"):
182182
memory_map.add_window(MemoryMap(addr_width=10, data_width=7), sparse=False)
183183

184+
def test_add_window_wrong_overlap(self):
185+
memory_map = MemoryMap(addr_width=16, data_width=8)
186+
memory_map.add_window(MemoryMap(addr_width=10, data_width=8))
187+
with self.assertRaisesRegex(ValueError,
188+
r"Address range 0x200\.\.0x600 overlaps with window "
189+
r"<nmigen_soc\.memory\.MemoryMap object at .+?> at 0x0\.\.0x400"):
190+
memory_map.add_window(MemoryMap(addr_width=10, data_width=8), addr=0x200)
191+
192+
def test_add_window_wrong_twice(self):
193+
memory_map = MemoryMap(addr_width=16, data_width=8)
194+
window = MemoryMap(addr_width=10, data_width=8)
195+
memory_map.add_window(window)
196+
with self.assertRaisesRegex(ValueError,
197+
r"Window <nmigen_soc\.memory\.MemoryMap object at .+?> is already added "
198+
r"at address range 0x0\.\.0x400"):
199+
memory_map.add_window(window)
200+
184201
def test_iter_windows(self):
185202
memory_map = MemoryMap(addr_width=16, data_width=16)
186203
window_1 = MemoryMap(addr_width=10, data_width=8)
@@ -198,6 +215,12 @@ def test_align_to(self):
198215
self.assertEqual(memory_map.align_to(10), 0x400)
199216
self.assertEqual(memory_map.add_resource("b", size=16), (0x400, 0x410))
200217

218+
def test_align_to_wrong(self):
219+
memory_map = MemoryMap(addr_width=16, data_width=8)
220+
with self.assertRaisesRegex(ValueError,
221+
r"Alignment must be a non-negative integer, not -1"):
222+
memory_map.align_to(-1)
223+
201224

202225
class MemoryMapDiscoveryTestCase(unittest.TestCase):
203226
def setUp(self):

nmigen_soc/test/test_wishbone_bus.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_wrong_granularity(self):
7676
r"Granularity must be one of 8, 16, 32, 64, not 7"):
7777
Interface(addr_width=0, data_width=32, granularity=7)
7878

79-
def test_wrong_granularity(self):
79+
def test_wrong_granularity_wide(self):
8080
with self.assertRaisesRegex(ValueError,
8181
r"Granularity 32 may not be greater than data width 8"):
8282
Interface(addr_width=0, data_width=8, granularity=32)

0 commit comments

Comments
 (0)