XXX MOCKUP: This code is not actually used at the moment! Ly needs a lot of work before it can weave & tangle this. The intent is that the code in here is run as a unittest class, while the woven HTML is put into the doc/ directory.
This document contains unit tests that any implementation of the Dim interface must pass. It is not assumed that the Dim implementation supports write access (changing connections).
.test files for specific dimension implementations must set the following variables:
Note that in Python, objects which do not specify any other behavior are treated as logically true, whereas None, the Python object equivalent to Java's null, is treated as logically false. This means that you can simply write c in the place of c != None, as in the following code:
if c: # This code is executed if c is a Cell else: # This code is executed if c is None
Respectively, you can use not c instead of c == None. Therefore, when testing whether a cell has a connection in a specific direction, we generally use if c.s(dim) instead of if c.s(dim) != None.
for c in cells:
First invariant: stepping zero steps must return the cell we started from.
assert c.s(dim) == c
Second invariant: If we step n cells in some direction, stepping n cells in the other direction must get us back where we started (except when we stepped over the end of a rank).
for n in range(-10, 10): if not c.s(dim, n): continue assert c.s(dim, n).s(dim, -n) == c
For each cell, we examine its headcell (c.h(dim)) and tailcell (c.h(dim, 1)) on our dimension.
for c in cells: head = c.h(dim) tail = c.h(dim, 1)
First invariant:
assert tail.h(dim) == head assert head.h(dim, 1) == tail
Second invariant: On ranks that are not ringranks, the headcell and the tailcell are the ends of the rank.
if not head.s(dim, -1): assert not head.s(dim, -1) assert not tail.s(dim, 1)
Third invariant: On ringranks, the tailcell must be connected to the headcell.
else: assert tail.s(dim) == head assert head.s(dim, -1) == tail
XXX There are no unit tests for dim iterators at the moment.