From 6dbf70131825f375172c535165de3efb35f593c1 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Thu, 8 Jun 2023 21:25:13 +0800 Subject: [PATCH] Prevent infinite loop --- api/s32_region_util.py | 3 +++ api/s33_dma_gen.py | 2 +- test_tjnetwork.py | 61 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/api/s32_region_util.py b/api/s32_region_util.py index eee3d85..d76d9f2 100644 --- a/api/s32_region_util.py +++ b/api/s32_region_util.py @@ -164,6 +164,9 @@ def calculate_boundary(name: str, nodes: list[str]) -> list[tuple[float, float]] # work into a branch, return if len(sorted_links) == 0: cursor = paths[-2] + if cursor == topology.max_x_node(): + paths.append(cursor) + break in_angle = in_angle = _angle_of_node_link(cursor, overlapped_link, t_nodes, t_links) continue diff --git a/api/s33_dma_gen.py b/api/s33_dma_gen.py index 577672f..4a88fdc 100644 --- a/api/s33_dma_gen.py +++ b/api/s33_dma_gen.py @@ -41,7 +41,7 @@ def generate_sub_district_metering_area(name: str, dma: str, part_count: int = 1 for nodes in calculate_district_metering_area_for_region(name, dma, part_count, part_type): boundary = calculate_boundary(name, nodes) boundary = inflate_boundary(name, boundary, inflate_delta) - cs.add({ 'type': 'district_metering_area', 'id': f"DMA_{level}_{i}", 'boundary': boundary, 'parent': dma, 'nodes': nodes }) + cs.add({ 'type': 'district_metering_area', 'id': f"DMA_[{dma}]_{level}_{i}", 'boundary': boundary, 'parent': dma, 'nodes': nodes }) i += 1 return execute_batch_command(name, cs) diff --git a/test_tjnetwork.py b/test_tjnetwork.py index 53026c1..108e778 100644 --- a/test_tjnetwork.py +++ b/test_tjnetwork.py @@ -6097,24 +6097,81 @@ class TestApi: cs = generate_district_metering_area(p, 3).operations assert len(cs) == 3 + assert cs[0]['operation'] == API_ADD + assert cs[0]['type'] == 'district_metering_area' + assert cs[0]['id'] == 'DMA_1_1' + assert cs[1]['operation'] == API_ADD + assert cs[1]['type'] == 'district_metering_area' + assert cs[1]['id'] == 'DMA_1_2' + assert cs[2]['operation'] == API_ADD + assert cs[2]['type'] == 'district_metering_area' + assert cs[2]['id'] == 'DMA_1_3' dmas = get_all_district_metering_area_ids(p) assert len(dmas) == 3 + assert dmas[0] == 'DMA_1_1' + assert dmas[1] == 'DMA_1_2' + assert dmas[2] == 'DMA_1_3' cs = generate_district_metering_area(p, 3).operations assert len(cs) == 6 + assert cs[0]['operation'] == API_DELETE + assert cs[0]['type'] == 'district_metering_area' + assert cs[0]['id'] == 'DMA_1_1' + assert cs[1]['operation'] == API_DELETE + assert cs[1]['type'] == 'district_metering_area' + assert cs[1]['id'] == 'DMA_1_2' + assert cs[2]['operation'] == API_DELETE + assert cs[2]['type'] == 'district_metering_area' + assert cs[2]['id'] == 'DMA_1_3' + assert cs[3]['operation'] == API_ADD + assert cs[3]['type'] == 'district_metering_area' + assert cs[3]['id'] == 'DMA_1_1' + assert cs[4]['operation'] == API_ADD + assert cs[4]['type'] == 'district_metering_area' + assert cs[4]['id'] == 'DMA_1_2' + assert cs[5]['operation'] == API_ADD + assert cs[5]['type'] == 'district_metering_area' + assert cs[5]['id'] == 'DMA_1_3' dmas = get_all_district_metering_area_ids(p) assert len(dmas) == 3 + assert dmas[0] == 'DMA_1_1' + assert dmas[1] == 'DMA_1_2' + assert dmas[2] == 'DMA_1_3' cs = generate_sub_district_metering_area(p, 'DMA_1_1', 2).operations assert len(cs) == 2 + assert cs[0]['operation'] == API_ADD + assert cs[0]['type'] == 'district_metering_area' + assert cs[0]['id'] == 'DMA_[DMA_1_1]_2_1' + assert cs[1]['operation'] == API_ADD + assert cs[1]['type'] == 'district_metering_area' + assert cs[1]['id'] == 'DMA_[DMA_1_1]_2_2' + + cs = generate_sub_district_metering_area(p, 'DMA_1_2', 3).operations + assert len(cs) == 2 + assert cs[0]['operation'] == API_ADD + assert cs[0]['type'] == 'district_metering_area' + assert cs[0]['id'] == 'DMA_[DMA_1_2]_2_2' + assert cs[1]['operation'] == API_ADD + assert cs[1]['type'] == 'district_metering_area' + assert cs[1]['id'] == 'DMA_[DMA_1_2]_2_3' + + cs = generate_sub_district_metering_area(p, 'DMA_1_3', 2).operations + assert len(cs) == 2 + assert cs[0]['operation'] == API_ADD + assert cs[0]['type'] == 'district_metering_area' + assert cs[0]['id'] == 'DMA_[DMA_1_3]_2_1' + assert cs[1]['operation'] == API_ADD + assert cs[1]['type'] == 'district_metering_area' + assert cs[1]['id'] == 'DMA_[DMA_1_3]_2_2' dmas = get_all_district_metering_area_ids(p) - assert len(dmas) == 5 + assert len(dmas) == 9 cs = generate_district_metering_area(p, 3).operations - assert len(cs) == 8 + assert len(cs) == 12 dmas = get_all_district_metering_area_ids(p) assert len(dmas) == 3