add merge_nodes_cycle func
This commit is contained in:
+17
-2
@@ -183,6 +183,20 @@ def merge_nodes_recursion(nodes: list[Node], required_len: int) -> list[Node]:
|
||||
return merge_nodes_recursion(new_nodes, required_len)
|
||||
|
||||
|
||||
def merge_nodes_cycle(nodes_to_merge: list[Node], required_len: int) -> list[Node]:
|
||||
nodes = [x for x in nodes_to_merge]
|
||||
while not len(nodes) <= required_len:
|
||||
groups = make_groups(nodes)
|
||||
neighbours, singles = find_neighbours_singles(groups)
|
||||
if neighbours:
|
||||
nodes = merge_neighbors(nodes, neighbours)
|
||||
elif singles:
|
||||
nodes = lift_lonely_node(nodes, singles)
|
||||
else:
|
||||
raise Cidr4MergerError("Invalid case!")
|
||||
return nodes
|
||||
|
||||
|
||||
def main():
|
||||
file = "cidr4.txt"
|
||||
required_len = 20
|
||||
@@ -191,8 +205,9 @@ def main():
|
||||
nodes = list(map(cidr4_to_node, data))
|
||||
|
||||
nodes = sort_nodes(nodes)
|
||||
# merged_nodes = merge_nodes(nodes, required_len)
|
||||
merged_nodes = merge_nodes_recursion(nodes, required_len)
|
||||
# merged_nodes = merge_nodes_deprecated(nodes, required_len)
|
||||
# merged_nodes = merge_nodes_recursion(nodes, required_len)
|
||||
merged_nodes = merge_nodes_cycle(nodes, required_len)
|
||||
|
||||
cidr4s = []
|
||||
sum_added_ips = 0
|
||||
|
||||
@@ -15,6 +15,7 @@ from cidr4_merger import (
|
||||
merge_neighbors,
|
||||
merge_nodes_deprecated,
|
||||
merge_nodes_recursion,
|
||||
merge_nodes_cycle,
|
||||
reduce_nodes,
|
||||
sort_nodes,
|
||||
)
|
||||
@@ -351,3 +352,29 @@ def test_merge_nodes_recursion():
|
||||
)
|
||||
assert exc_info.type is Cidr4MergerError
|
||||
assert str(exc_info.value) == "The top of the tree has no parent!"
|
||||
|
||||
|
||||
def test_merge_nodes_cycle():
|
||||
assert merge_nodes_cycle(
|
||||
[
|
||||
(0, 2, 12, 0),
|
||||
(2147483648, 2, 1, 2147483648),
|
||||
(3221225472, 2, 2, 2147483648),
|
||||
],
|
||||
2,
|
||||
) == [
|
||||
(2147483648, 1, 3, 0),
|
||||
(0, 2, 12, 0),
|
||||
]
|
||||
|
||||
with pytest.raises(Exception) as exc_info:
|
||||
merge_nodes_cycle(
|
||||
[
|
||||
(0, 2, 12, 0),
|
||||
(2147483648, 2, 1, 2147483648),
|
||||
(3221225472, 2, 2, 2147483648),
|
||||
],
|
||||
1,
|
||||
)
|
||||
assert exc_info.type is Cidr4MergerError
|
||||
assert str(exc_info.value) == "The top of the tree has no parent!"
|
||||
|
||||
Reference in New Issue
Block a user