def test_closest_nodes_only_routing(empty_routing_table): target = NodeIDFactory() nodes = [NodeIDFactory() for _ in range(10)] for node in nodes: empty_routing_table.update(node) closest_nodes = list(iter_closest_nodes(target, empty_routing_table, [])) assert closest_nodes == sorted(nodes, key=lambda node: compute_distance(target, node))
def test_lookup_generator_mixed(empty_routing_table): target = NodeIDFactory() nodes = sorted( [NodeIDFactory() for _ in range(10)], key=lambda node: compute_distance(node, target) ) nodes_in_routing_table = nodes[:3] + nodes[6:8] nodes_in_additional = nodes[3:6] + nodes[8:] for node in nodes_in_routing_table: empty_routing_table.update(node) closest_nodes = list(iter_closest_nodes(target, empty_routing_table, nodes_in_additional)) assert closest_nodes == nodes
def test_distance(left_node_id, right_node_id, distance): assert compute_distance(left_node_id, right_node_id) == distance assert compute_distance(right_node_id, left_node_id) == distance
def test_closest_nodes_only_additional(empty_routing_table): target = NodeIDFactory() nodes = [NodeIDFactory() for _ in range(10)] closest_nodes = list(iter_closest_nodes(target, empty_routing_table, nodes)) assert closest_nodes == sorted(nodes, key=lambda node: compute_distance(target, node))
def dist(node: NodeID) -> float: if node is not None: return compute_distance(target, node) else: return math.inf