def test_append() -> None: dim = 4 multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) multilist.append(new_node, 0) for i in range(1, dim): assert new_node.next[i] is new_node assert new_node.prev[i] is new_node assert multilist.sentinel.next[i] is multilist.sentinel assert multilist.sentinel.prev[i] is multilist.sentinel assert new_node.next[0] is multilist.sentinel assert new_node.prev[0] is multilist.sentinel assert multilist.sentinel.next[0] is new_node assert multilist.sentinel.prev[0] is new_node another_node = VectorNode(dim) multilist.append(another_node, 0) for i in range(1, dim): assert new_node.next[i] is new_node assert new_node.prev[i] is new_node assert multilist.sentinel.next[i] is multilist.sentinel assert multilist.sentinel.prev[i] is multilist.sentinel assert new_node.next[0] is another_node assert new_node.prev[0] is multilist.sentinel assert multilist.sentinel.next[0] is new_node assert multilist.sentinel.prev[0] is another_node
def test_reinsert() -> None: dim = 2 multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) another_node = VectorNode(dim) multilist.append(new_node, 0) multilist.append(another_node, 0) multilist.append(another_node, 1) multilist.append(new_node, 1) popped_node = multilist.pop(new_node, 1 + 1) multilist.reinsert(new_node, 0 + 1) assert multilist.chain_length(0) == 2 assert multilist.chain_length(1) == 1 assert new_node.next[0] is another_node assert new_node.prev[0] is multilist.sentinel assert another_node.prev[0] is new_node assert another_node.next[0] is multilist.sentinel assert another_node.prev[1] is multilist.sentinel assert another_node.next[1] is multilist.sentinel multilist.reinsert(popped_node, 1 + 1) assert multilist.chain_length(0) == 2 assert multilist.chain_length(1) == 2 assert another_node.prev[1] is multilist.sentinel assert another_node.next[1] is new_node assert new_node.prev[1] is another_node assert new_node.next[1] is multilist.sentinel
def test_chain_length() -> None: dim = 3 multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) multilist.append(new_node, 0) assert multilist.chain_length(0) == 1 assert multilist.chain_length(1) == 0 assert multilist.chain_length(2) == 0 another_node = VectorNode(dim) multilist.append(another_node, 0) assert multilist.chain_length(0) == 2 assert multilist.chain_length(1) == 0 assert multilist.chain_length(2) == 0 multilist.append(another_node, 1) assert multilist.chain_length(0) == 2 assert multilist.chain_length(1) == 1 assert multilist.chain_length(2) == 0 multilist.append(new_node, 2) assert multilist.chain_length(0) == 2 assert multilist.chain_length(1) == 1 assert multilist.chain_length(2) == 1
def test_initialize_node() -> None: dim = 4 coordinates = [1.0, 2.0, 3.0] node = VectorNode(dim, coordinates=coordinates) assert isinstance(node.coordinates, np.ndarray) assert list(node.coordinates) == coordinates for entry in node.next: assert entry is node for entry in node.prev: assert entry is node assert list(node.area) == [0.0] * dim assert list(node.volume) == [0.0] * dim assert str(node) == "[1. 2. 3.]" node.configure_area(0) assert node.area[0] == 1.0 assert node.area[1] == 0.0 assert node.area[2] == 0.0 node.configure_area(1) assert node.area[0] == 1.0 assert node.area[1] == -1.0 assert node.area[2] == 0.0 node.configure_area(2) assert node.area[0] == 1.0 assert node.area[1] == -1.0 assert node.area[2] == 2.0
def test_sort_by_index() -> None: nodes = [ VectorNode(3, [1, 2, 3]), VectorNode(3, [2, 3, 1]), VectorNode(3, [3, 1, 2]) ] new_nodes = VectorLinkedList.sort_by_index(nodes, 0) assert new_nodes == nodes new_nodes = VectorLinkedList.sort_by_index(nodes, 1) assert new_nodes == [nodes[2], nodes[0], nodes[1]] new_nodes = VectorLinkedList.sort_by_index(nodes, 2) assert new_nodes == [nodes[1], nodes[2], nodes[0]]
def test_extend() -> None: dim = 1 multilist = VectorLinkedList(dimension=dim) another_multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) another_node = VectorNode(dim) multilist.append(new_node, 0) multilist.append(another_node, 0) another_multilist.extend([new_node, another_node], 0) assert another_multilist.chain_length(0) == 2 assert another_multilist.sentinel.next[0] is multilist.sentinel.next[0] assert another_multilist.sentinel.next[0].next[ 0] is multilist.sentinel.next[0].next[0]
def test_update_coordinate_bounds() -> None: bounds = np.array([-1.0, -1.0, -1.0]) node = VectorNode(3, coordinates=[1.0, -2.0, -1.0]) bounds = VectorLinkedList.update_coordinate_bounds(bounds, node, 0 + 1) assert list(bounds) == [-1, -1, -1] bounds = VectorLinkedList.update_coordinate_bounds(bounds, node, 1 + 1) assert list(bounds) == [-1, -2, -1] bounds = VectorLinkedList.update_coordinate_bounds(bounds, node, 2 + 1) assert list(bounds) == [-1, -2, -1]
def test_iterate() -> None: dim = 1 multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) another_node = VectorNode(dim) multilist.append(new_node, 0) multilist.append(another_node, 0) gen = multilist.iterate(0) assert next(gen) is new_node assert next(gen) is another_node yet_another_node = VectorNode(dim) multilist.append(yet_another_node, 0) gen = multilist.iterate(0, start=another_node) assert next(gen) is another_node assert next(gen) is yet_another_node
def test_initialize_empty_node() -> None: dim = 4 node = VectorNode(dim) assert isinstance(node.coordinates, np.ndarray) for entry in node.next: assert entry is node for entry in node.prev: assert entry is node assert list(node.area) == [0.0] * dim assert list(node.volume) == [0.0] * dim assert str(node) == "None"
def test_pop() -> None: dim = 4 multilist = VectorLinkedList(dimension=dim) new_node = VectorNode(dim) multilist.append(new_node, 0) popped_node = multilist.pop(new_node, 0 + 1) assert popped_node is new_node assert new_node.next[0] is multilist.sentinel assert new_node.prev[0] is multilist.sentinel for i in range(dim): assert multilist.sentinel.next[i] is multilist.sentinel assert multilist.sentinel.prev[i] is multilist.sentinel