From f34355636653cfbea4998095fe84f3886dfe22b7 Mon Sep 17 00:00:00 2001 From: Mmorgenn Date: Fri, 15 Dec 2023 02:09:38 +0300 Subject: [PATCH 1/2] add: realisation of street dictionary --- .../Homework_6/Homework_6_2/streets.py | 185 ++ src/homework/Homework_6/avl_tree.py | 90 +- .../Homework_6/Homework_6_2/streets_logs.txt | 513 ++++++ .../Homework_6_2/streets_results.txt | 1561 +++++++++++++++++ .../Homework_6/Homework_6_2/test_streets.py | 472 +++++ tests/homeworks/Homework_6/test_avl_2.py | 617 +++++++ 6 files changed, 3437 insertions(+), 1 deletion(-) create mode 100644 src/homework/Homework_6/Homework_6_2/streets.py create mode 100644 tests/homeworks/Homework_6/Homework_6_2/streets_logs.txt create mode 100644 tests/homeworks/Homework_6/Homework_6_2/streets_results.txt create mode 100644 tests/homeworks/Homework_6/Homework_6_2/test_streets.py create mode 100644 tests/homeworks/Homework_6/test_avl_2.py diff --git a/src/homework/Homework_6/Homework_6_2/streets.py b/src/homework/Homework_6/Homework_6_2/streets.py new file mode 100644 index 0000000..48749da --- /dev/null +++ b/src/homework/Homework_6/Homework_6_2/streets.py @@ -0,0 +1,185 @@ +from os.path import exists +from src.homeworks.Homework_6.avl_tree import * + + +def check_files(file_input, file_output): + if exists(file_input) and not exists(file_output): + return True + if not exists(file_input): + print(f"Файл {file_input} ненайден") + if exists(file_output): + print(f"Файл {file_output} уже существует!") + return False + + +def is_correct_address(address: list[str]) -> bool: + if len(address) == 3: + return address[1].isdigit() and address[2].isdigit() + return False + + +def create(directory: TreeMap[Value], address: list[str], index: str): + street, house, building = address + put(directory, (street, int(house), int(building)), index) + + +def get(directory: TreeMap[Value], address: list[str]) -> str: + street, house, building = address + try: + index_result = get_value(directory, (street, int(house), int(building))) + except ValueError: + return "None" + return str(index_result) + + +def delete_block(directory: TreeMap[Value], address: list[str]): + street, house, block = address + try: + remove(directory, (street, int(house), int(block))) + except ValueError: + return + + +def delete_house(directory: TreeMap[Value], street: str, house: int): + remove_keys(directory, (street, house, 0), (street, house + 1, 0)) + + +def delete_street(directory: TreeMap[Value], street: str): + remove_keys(directory, (street, 0, 0), (street + "0", 0, 0)) + + +def get_list_addresses( + directory: TreeMap[Value], address_1: list[str], address_2: list[str] +) -> str: + street_1, house_1, block_1 = address_1 + street_2, house_2, block_2 = address_2 + try: + result_list = get_all_keys( + directory, + (street_1, int(house_1), int(block_1)), + (street_2, int(house_2), int(block_2)), + ) + except ValueError: + result_list = [] + result = list(map(lambda x: f"{x[0]} {x[1]} {x[2]}", result_list)) + result.append("\n") + return "\n".join(result) + + +def rename(directory: TreeMap[Value], old_street: str, new_street: str): + required_addresses = get_all( + directory, (old_street, 0, 0), (old_street + "0", 0, 0) + ) + remove_keys(directory, (old_street, 0, 0), (old_street + "0", 0, 0)) + for address, index in required_addresses: + put(directory, (new_street, address[1], address[2]), index) + + +def run_commands(directory: TreeMap[Value], command: str): + arguments = command.split() + if arguments[0] != "EXIT" and len(arguments) < 2: + return "ERROR" + command = arguments.pop(0) + match command: + case "CREATE": + index = arguments.pop(-1) + if not is_correct_address(arguments) or not index.isdigit(): + return "ERROR" + create(directory, arguments, index) + + case "GET": + if not is_correct_address(arguments): + return "ERROR" + return get(directory, arguments) + "\n" + + case "DELETE_BLOCK": + if not is_correct_address(arguments): + return "ERROR" + delete_block(directory, arguments) + + case "DELETE_HOUSE": + if len(arguments) != 2 or not arguments[1].isdigit(): + return "ERROR" + delete_house(directory, arguments[0], int(arguments[1])) + + case "DELETE_STREET": + if len(arguments) != 1: + return "ERROR" + delete_street(directory, *arguments) + + case "LIST": + if ( + not len(arguments) == 6 + or not is_correct_address(arguments[:3]) + or not is_correct_address(arguments[3:]) + ): + return "ERROR" + address_1, address_2 = arguments[:3], arguments[3:] + return get_list_addresses(directory, address_1, address_2) + + case "RENAME": + if not len(arguments) == 2: + return "ERROR" + old_name, new_name = arguments + rename(directory, old_name, new_name) + + case "EXIT": + return "$EXIT" + + +def run_interactive_mode(directory: TreeMap[Value]): + command = input("Input command: ") + result = run_commands(directory, command) + if result: + match result: + case "$EXIT": + return + + case _: + print(result) + return run_interactive_mode(directory) + + +def file_scrolling(directory: TreeMap[Value], file_name_input: str) -> list[str]: + results = list() + with open(file_name_input, encoding="utf-8", mode="r") as file_input: + count_command = int(file_input.readline()) + for command in range(count_command): + command = file_input.readline() + result = run_commands(directory, command) + if result: + results.append(result) + return results + + +def file_writing_results(results: list[str], file_name_output: str): + with open(file_name_output, "w") as file_output: + file_output.writelines(result for result in results) + + +def run_static_mode( + directory: TreeMap[Value], file_input_name: str, file_output_name: str +): + results = file_scrolling(directory, file_input_name) + file_writing_results(results, file_output_name) + + +def main(): + directory = create_tree_map() + mode_selector = input("Choose: \n(1) - Interactive mode\n(2) - Static mode\n") + match mode_selector: + case "1": + run_interactive_mode(directory) + + case "2": + file_input = input("Input file for reading: ") + file_output = input("Input file for writing: ") + if check_files(file_input, file_output): + run_static_mode(directory, file_input, file_output) + + case _: + print("Error! You must choose 1 or 2") + + +if __name__ == "__main__": + main() diff --git a/src/homework/Homework_6/avl_tree.py b/src/homework/Homework_6/avl_tree.py index 63370f3..e131d2f 100644 --- a/src/homework/Homework_6/avl_tree.py +++ b/src/homework/Homework_6/avl_tree.py @@ -1,6 +1,6 @@ from dataclasses import dataclass from typing import Generic, Optional, TypeVar - +from copy import deepcopy Value = TypeVar("Value") Key = TypeVar("Key") @@ -308,3 +308,91 @@ def _double_right_rotate(node: TreeNode[Value]) -> TreeNode[Value]: def _double_left_rotate(node: TreeNode[Value]) -> TreeNode[Value]: node.left = _single_right_rotate(node.left) return _single_left_rotate(node) + + +# for Homework_6_2 + + +def split(tree_map: TreeMap[Value], key: Key) -> tuple[TreeMap[Value], TreeMap[Value]]: + tree_map = deepcopy(tree_map) + if _is_empty(tree_map): + another_map = create_tree_map() + return tree_map, another_map + + def _split(node, small_root, big_root): + if not node: + return None, None + if node.key == key: + new_node = merge_node(TreeNode(node.key, node.value), node.right) + return node.left, new_node + if node.key < key: + small_root, big_root = _split(node.right, small_root, big_root) + new_node = merge_node(node.left, TreeNode(node.key, node.value)) + return merge_node(new_node, small_root), big_root + if node.key > key: + small_root, big_root = _split(node.left, small_root, big_root) + new_node = merge_node(TreeNode(node.key, node.value), node.right) + return small_root, merge_node(big_root, new_node) + + small_tree = create_tree_map() + big_tree = create_tree_map() + small_tree.root, big_tree.root = _split(tree_map.root, None, None) + return small_tree, big_tree + + +def merge_node(node: TreeNode[Value], another_node: TreeNode[Value]) -> TreeNode[Value]: + if not node or not another_node: + return node if node else another_node + if _get_height(node) <= _get_height(another_node): + another_node.left = merge_node(node, another_node.left) + return _update_balance(another_node) + else: + node.right = merge_node(node.right, another_node) + return _update_balance(node) + + +def join(tree_map: TreeMap[Value], another: TreeMap[Value]) -> TreeMap[Value]: + if _is_empty(tree_map): + return another + if _is_empty(another): + return tree_map + + def _join_equal_keys_size(small_tree: TreeMap[Value], big_tree: TreeMap[Value]): + for key, value in traverse(small_tree, "preorder"): + put(big_tree, key, value) + return big_tree + + if get_maximum_key(another) < get_minimum_key(tree_map): + new_tree = create_tree_map() + new_tree.root = merge_node(another.root, tree_map.root) + return new_tree + if get_maximum_key(tree_map) < get_minimum_key(another): + new_tree = create_tree_map() + new_tree.root = merge_node(tree_map.root, another.root) + return new_tree + if _get_size(tree_map.root) <= _get_size(another.root): + return _join_equal_keys_size(tree_map, another) + if _get_size(tree_map.root) > _get_size(another.root): + return _join_equal_keys_size(another, tree_map) + + +def get_all(tree_map: TreeMap[Value], left: Key, right: Key) -> list[(Key, Value)]: + if left > right: + raise ValueError("Must be left_key <= right_key!") + big_tree = split(tree_map, left)[1] + tree_key_range = split(big_tree, right)[0] + return traverse(tree_key_range, "inorder") + + +def get_all_keys(tree_map: TreeMap[Value], left: Key, right: Key) -> list[Key]: + if left > right: + raise ValueError("Must be left_key <= right_key!") + return list(map(lambda pair: pair[0], get_all(tree_map, left, right))) + + +def remove_keys(tree_map: TreeMap[Value], left: Key, right: Key): + if left > right: + raise ValueError("Must be left_key <= right_key!") + small_tree, big_tree = split(tree_map, left) + big_tree = split(tree_map, right)[1] + tree_map.root = join(small_tree, big_tree).root diff --git a/tests/homeworks/Homework_6/Homework_6_2/streets_logs.txt b/tests/homeworks/Homework_6/Homework_6_2/streets_logs.txt new file mode 100644 index 0000000..e180828 --- /dev/null +++ b/tests/homeworks/Homework_6/Homework_6_2/streets_logs.txt @@ -0,0 +1,513 @@ +512 +CREATE Близкая 11 2 0 +LIST Близкая 11 1 Большая 1 3 +LIST Белая 9 3 Близкая 11 2 +CREATE Близкая 11 3 5 +CREATE Близкая 1 4 6 +LIST Белая 11 4 Близкая 2 3 +DELETE_BLOCK Близкая 1 4 +LIST Близкая 11 2 Большая 6 3 +LIST Близкая 11 2 Близкая 11 4 +CREATE Одуванчиков 14 3 12 +GET Одуванчиков 14 3 +GET Одуванчиков 14 3 +DELETE_STREET Близкая +CREATE Одуванчиков 14 2 16 +CREATE Синяя 9 1 17 +CREATE Синяя 10 3 18 +CREATE Синяя 9 2 20 +CREATE Синяя 1 1 21 +CREATE Одуванчиков 2 1 22 +RENAME Синяя Карельская +CREATE Апокалиптическая 12 3 23 +CREATE Карельская 16 1 24 +CREATE Карельская 14 1 25 +CREATE Карельская 8 4 26 +CREATE Одуванчиков 15 2 27 +RENAME Апокалиптическая Малая +DELETE_HOUSE Соловьёв 16 +GET Карельская 14 1 +CREATE Братская 2 2 30 +CREATE Одуванчиков 13 2 31 +LIST Карельская 8 2 Карельская 9 3 +RENAME Малая Новиградская +LIST Братская 2 1 Одуванчиков 14 3 +CREATE Одуванчиков 8 1 36 +CREATE Одуванчиков 12 2 37 +CREATE Братская 1 2 38 +GET Карельская 8 4 +GET Братская 1 2 +RENAME Новиградская Малая +GET Братская 1 2 +LIST Большая 2 4 Одуванчиков 15 4 +CREATE Братская 9 4 44 +LIST Карельская 8 3 Одуванчиков 15 3 +RENAME Карельская Летняя +GET Одуванчиков 15 2 +CREATE Братская 3 4 48 +GET Язя 5 3 +GET Одуванчиков 10 2 +GET Побольпше 7 3 +DELETE_STREET Московская +LIST Летняя 9 1 Одуванчиков 12 3 +GET Летняя 16 1 +CREATE Малая 15 1 54 +GET Малая 15 1 +LIST Летняя 9 2 Летняя 16 2 +CREATE Одуванчиков 16 1 57 +LIST Летняя 13 3 Одуванчиков 16 1 +LIST Ленинградская 4 2 Малая 12 3 +DELETE_BLOCK Малая 15 1 +CREATE Братская 1 4 62 +CREATE Летняя 2 2 63 +LIST Новосибирская 7 3 Оранжевая 10 4 +RENAME Братская Весенняя +CREATE Славы 8 3 66 +DELETE_BLOCK Одуванчиков 8 1 +RENAME Малая Братская +GET Славы 8 3 +CREATE Братская 12 2 70 +DELETE_BLOCK Одуванчиков 15 2 +CREATE Сазанов 12 4 72 +CREATE Сазанов 4 2 73 +CREATE Побольпше 12 1 74 +GET Сазанов 12 4 +LIST Летняя 9 2 Побольпше 12 1 +LIST Братская 12 2 Одуванчиков 16 2 +GET Ждуна 5 4 +GET Летняя 1 1 +DELETE_STREET Пушкина +GET Славы 8 3 +CREATE Одуванчиков 3 3 80 +CREATE Побольпше 13 2 81 +CREATE Сазанов 13 3 82 +LIST Летняя 14 1 Оранжевая 16 3 +CREATE Братская 1 4 84 +DELETE_STREET Зимняя +RENAME Побольпше Лишняя +LIST Одуванчиков 12 4 Одуванчиков 15 2 +LIST Большая 11 4 Летняя 16 1 +CREATE Братская 7 2 88 +GET Одуванчиков 16 1 +CREATE Братская 9 2 90 +RENAME Весенняя Гагарина +GET Гагарина 1 4 +CREATE Братская 12 1 93 +GET Летняя 14 1 +CREATE Лишняя 5 2 95 +LIST Братская 12 2 Гагарина 2 2 +GET Летняя 2 2 +LIST Летняя 1 1 Одуванчиков 13 2 +CREATE Лишняя 2 2 99 +GET Славы 8 3 +CREATE Сибирская 16 1 101 +CREATE Славы 8 1 103 +LIST Братская 12 1 Гагарина 9 4 +RENAME Славы Журавлиная +CREATE Гагарина 7 3 104 +CREATE Победа 11 1 105 +LIST Братская 12 3 Малая 11 2 +CREATE Летняя 12 1 107 +DELETE_HOUSE Победа 11 +GET Одуванчиков 2 1 +RENAME Гагарина Ленинградская +RENAME Сазанов Таймырская +RENAME Братская Пескарёвая +DELETE_HOUSE Таймырская 13 +GET Ленинградская 3 4 +LIST Лишняя 4 4 Пескарёвая 13 3 +DELETE_STREET Журавлиная +LIST Летняя 9 1 Лишняя 4 4 +GET Каедвенская 6 3 +GET Одуванчиков 2 1 +CREATE Сибирская 4 2 118 +CREATE Одуванчиков 7 1 119 +CREATE Фиолетовая 5 1 120 +GET Казанская 1 1 +LIST Курильская 3 2 Центральная 15 2 +CREATE Пескарёвая 9 3 125 +CREATE Летняя 7 2 126 +CREATE Пескарёвая 5 4 127 +GET Одуванчиков 7 1 +DELETE_HOUSE Таймырская 4 +DELETE_BLOCK Южная 15 1 +CREATE Одуванчиков 6 4 131 +RENAME Пескарёвая Ростовская +CREATE Летняя 3 1 132 +GET Сибирская 16 1 +GET Ленинградская 3 4 +LIST Ленинградская 1 2 Ленинградская 1 2 +GET Красная 10 3 +CREATE Ленинградская 11 3 136 +LIST Ростовская 1 4 Ростовская 12 2 +CREATE Таймырская 9 4 137 +CREATE Победа 3 1 138 +CREATE Ростовская 1 2 140 +LIST Одуванчиков 2 1 Одуванчиков 12 3 +LIST Одуванчиков 2 1 Фиолетовая 5 1 +GET Жёлтая 16 3 +GET Фиолетовая 5 1 +DELETE_HOUSE Ленинградская 9 +CREATE Таймырская 12 2 146 +DELETE_HOUSE Ждуна 8 +CREATE Ростовская 16 4 148 +CREATE Фиолетовая 7 2 149 +LIST Ленинградская 7 3 Ростовская 13 1 +CREATE Одуванчиков 10 3 151 +CREATE Одуванчиков 15 4 152 +DELETE_BLOCK Лишняя 2 2 +CREATE Фиолетовая 9 4 154 +DELETE_BLOCK Летняя 8 4 +GET Победа 3 1 +CREATE Сибирская 6 3 157 +DELETE_STREET Сибирская +CREATE Ростовская 14 3 158 +DELETE_STREET Лишняя +GET Ленинградская 1 4 +CREATE Ленинградская 14 2 160 +GET Летняя 14 1 +CREATE Победа 11 4 162 +CREATE Таймырская 7 3 163 +LIST Курильская 13 2 Летняя 16 1 +GET Ленинградская 3 4 +GET Фиолетовая 7 2 +GET Одуванчиков 7 1 +LIST Летняя 8 1 Фиолетовая 9 4 +RENAME Летняя Фазанов +CREATE Одуванчиков 10 4 170 +DELETE_BLOCK Таймырская 9 4 +CREATE Ростовская 13 1 172 +CREATE Одуванчиков 4 3 173 +GET Победа 1 4 +GET Таймырская 12 2 +CREATE Победа 12 1 176 +LIST Ленинградская 6 1 Ростовская 14 4 +CREATE Ленинградская 16 1 179 +GET Ленинградская 2 2 +CREATE Победа 8 4 181 +GET Одуванчиков 10 3 +RENAME Одуванчиков Восточная +GET Ленинградская 2 2 +CREATE Ленинградская 12 3 184 +CREATE Восточная 9 2 185 +GET Победа 6 1 +RENAME Фиолетовая Осенняя +GET Осенняя 9 4 +CREATE Фазанов 15 1 188 +CREATE Осенняя 3 1 189 +CREATE Ростовская 2 1 190 +CREATE Ленинградская 6 2 191 +GET Ростовская 6 4 +GET Таймырская 7 3 +CREATE Ростовская 2 4 195 +DELETE_STREET Победа +CREATE Фазанов 13 1 196 +CREATE Фазанов 6 3 197 +CREATE Восточная 11 2 198 +LIST Восточная 6 4 Летняя 13 4 +LIST Восточная 16 1 Летняя 11 4 +CREATE Таймырская 16 3 202 +RENAME Таймырская Грибоедова +CREATE Сибирская 16 4 203 +DELETE_STREET Осенняя +GET Сибирская 16 4 +DELETE_BLOCK Фазанов 1 1 +LIST Уральская 14 4 Фазанов 14 3 +CREATE Восточная 9 1 209 +DELETE_BLOCK Ростовская 7 2 +DELETE_BLOCK Мемная 2 3 +LIST Грибоедова 12 3 Фазанов 9 3 +DELETE_HOUSE Ленинградская 16 +GET Грибоедова 7 3 +RENAME Ленинградская Невская +CREATE Ростовская 3 1 216 +CREATE Ростовская 8 3 217 +CREATE Ростовская 5 3 219 +GET Ростовская 12 1 +CREATE Ростовская 7 1 221 +LIST Воробьёв 2 1 Гагарина 3 3 +CREATE Невская 14 1 225 +DELETE_HOUSE Ростовская 7 +GET Восточная 3 3 +CREATE Фазанов 8 3 228 +GET Фазанов 10 3 +GET Фазанов 13 1 +RENAME Сибирская Средняя +RENAME Грибоедова Братская +DELETE_BLOCK Восточная 9 2 +CREATE Зелёная 7 1 232 +GET Средняя 16 4 +DELETE_HOUSE Невская 3 +CREATE Невская 13 3 235 +CREATE Восточная 8 3 236 +DELETE_STREET Злая +CREATE Средняя 9 1 237 +DELETE_HOUSE Средняя 9 +GET Далёкая 9 2 +CREATE Фазанов 4 1 240 +GET Зелёная 13 2 +DELETE_STREET Восточная +GET Фазанов 13 1 +CREATE Владивосточная 1 1 243 +DELETE_BLOCK Ростовская 12 1 +CREATE Владивосточная 4 3 245 +GET Фазанов 10 3 +RENAME Ростовская Новосибирская +CREATE Фазанов 11 2 247 +GET Братская 13 4 +RENAME Зелёная Пекарей +DELETE_STREET Средняя +CREATE Новосибирская 4 1 249 +LIST Большая 11 3 Одуванчиков 2 1 +GET Невская 2 2 +DELETE_STREET Братская +CREATE Невская 5 3 253 +DELETE_HOUSE Пекарей 7 +CREATE Новосибирская 15 4 255 +LIST Московская 12 2 Новосибирская 4 1 +CREATE Владивосточная 3 1 257 +CREATE Новосибирская 10 4 258 +CREATE Фазанов 5 1 259 +GET Новосибирская 1 4 +CREATE Владивосточная 6 4 261 +GET Владивосточная 6 4 +GET Фазанов 8 3 +CREATE Тверская 11 4 264 +CREATE Тверская 9 4 265 +LIST Московская 15 3 Фиолетовая 12 2 +GET Новосибирская 4 1 +DELETE_BLOCK Фазанов 15 1 +LIST Новосибирская 1 3 Фиолетовая 1 4 +CREATE Невская 3 3 272 +GET Тверская 11 4 +LIST Владивосточная 3 1 Нильфгардская 11 4 +CREATE Чукотская 15 2 275 +GET Невская 14 1 +CREATE Новосибирская 11 2 277 +RENAME Новосибирская Воробьёв +CREATE Чукотская 8 1 278 +GET Владивосточная 6 4 +LIST Невская 7 2 Невская 14 1 +DELETE_HOUSE Тверская 11 +CREATE Невская 8 3 282 +GET Воробьёв 7 2 +LIST Невская 13 2 Фазанов 10 3 +DELETE_BLOCK Чукотская 15 2 +RENAME Чукотская Новиградская +GET Фазанов 6 3 +CREATE Мемная 13 3 287 +GET Мемная 13 3 +GET Воробьёв 12 2 +CREATE Воробьёв 5 1 291 +GET Тверская 9 4 +GET Невская 2 2 +GET Мемная 13 3 +CREATE Новиградская 8 4 296 +LIST Воробьёв 5 4 Невская 11 4 +CREATE Казанская 5 4 298 +GET Казанская 5 4 +RENAME Новиградская Одуванчиков +GET Владивосточная 3 1 +RENAME Невская Папская +DELETE_HOUSE Казанская 5 +DELETE_BLOCK Тверская 9 4 +CREATE Воробьёв 7 3 303 +LIST Осенняя 10 3 Фазанов 14 2 +GET Венгербергская 10 3 +LIST Мемная 13 3 Фиолетовая 15 2 +GET Фазанов 2 2 +GET Фазанов 11 2 +RENAME Владивосточная Каедвенская +DELETE_STREET Воробьёв +CREATE Каедвенская 2 2 310 +LIST Мемная 12 1 Фазанов 13 2 +CREATE Мемная 15 4 313 +GET Казанская 3 2 +LIST Папская 3 2 Папская 11 4 +CREATE Папская 4 4 317 +CREATE Папская 10 3 318 +LIST Каедвенская 3 4 Фиолетовая 16 3 +DELETE_HOUSE Новосибирская 5 +GET Папская 3 3 +DELETE_HOUSE Грибоедова 1 +RENAME Каедвенская Голубей +CREATE Мемная 9 4 324 +CREATE Пушкина 16 4 325 +CREATE Дальневосточная 9 1 326 +GET Папская 8 3 +CREATE Папская 15 4 328 +DELETE_HOUSE Добрая 1 +CREATE Дальневосточная 9 4 331 +GET Одуванчиков 8 4 +DELETE_BLOCK Дальневосточная 9 4 +CREATE Голубей 13 4 334 +CREATE Одуванчиков 4 4 335 +LIST Новосибирская 2 4 Фазанов 11 2 +GET Папская 9 2 +CREATE Мемная 11 2 338 +CREATE Фазанов 15 4 339 +LIST Фазанов 5 1 Фазанов 6 3 +CREATE Дальневосточная 2 1 340 +LIST Уральская 16 2 Фазанов 13 3 +DELETE_HOUSE Дальневосточная 2 +CREATE Пушкина 1 4 344 +DELETE_BLOCK Грибоедова 14 2 +GET Пушкина 3 4 +LIST Папская 12 3 Фазанов 2 2 +GET Одуванчиков 4 4 +GET Папская 8 3 +DELETE_BLOCK Восточная 4 3 +CREATE Дальневосточная 11 1 350 +CREATE Голубей 5 3 351 +CREATE Дальневосточная 5 1 352 +LIST Героев 10 1 Одуванчиков 8 2 +GET Дальневосточная 5 1 +CREATE Строителей 5 3 356 +CREATE Фазанов 2 1 358 +CREATE Пушкина 5 1 359 +CREATE Одуванчиков 14 2 360 +CREATE Мемная 8 3 361 +GET Мемная 4 1 +CREATE Строителей 8 3 363 +CREATE Одуванчиков 6 4 364 +GET Пушкина 16 4 +CREATE Фазанов 1 3 366 +RENAME Мемная Венгербергская +RENAME Пушкина Чукотская +LIST Важная 5 1 Фазанов 13 2 +LIST Героев 3 4 Фазанов 3 2 +CREATE Венгербергская 3 2 371 +DELETE_HOUSE Строителей 8 +LIST Одуванчиков 14 2 Папская 6 3 +CREATE Московская 15 4 374 +DELETE_BLOCK Одуванчиков 4 4 +RENAME Дальневосточная Запасная +CREATE Венгербергская 1 1 376 +RENAME Папская Каедвенская +CREATE Строителей 7 3 377 +LIST Строителей 6 3 Фиолетовая 2 4 +CREATE Одуванчиков 9 2 380 +LIST Венгербергская 1 1 Фазанов 16 2 +CREATE Голубей 11 1 382 +DELETE_HOUSE Зимняя 14 +CREATE Запасная 4 3 384 +GET Южная 15 2 +RENAME Фазанов Большая +RENAME Чукотская Синяя +DELETE_HOUSE Жёлтая 16 +CREATE Большая 6 4 388 +GET Зимняя 12 1 +GET Голубей 4 3 +CREATE Одуванчиков 16 3 391 +CREATE Голубей 16 2 392 +CREATE Каедвенская 9 1 393 +RENAME Большая Гагарина +RENAME Запасная Поменьпше +CREATE Строителей 7 4 395 +CREATE Злая 5 4 396 +RENAME Одуванчиков Уральская +CREATE Голубей 7 4 397 +CREATE Журавлиная 16 2 398 +CREATE Злая 7 3 399 +CREATE Голубей 12 3 400 +DELETE_HOUSE Журавлиная 16 +CREATE Каедвенская 16 1 402 +GET Гагарина 2 2 +CREATE Злая 14 4 404 +DELETE_BLOCK Пекарей 13 4 +LIST Гагарина 13 1 Каедвенская 4 4 +CREATE Венгербергская 3 1 407 +GET Московская 15 4 +GET Поменьпше 5 1 +DELETE_STREET Московская +GET Поменьпше 15 2 +CREATE Поменьпше 6 4 411 +CREATE Сазанов 14 2 412 +GET Поменьпше 6 4 +CREATE Злая 16 1 414 +GET Синяя 5 1 +LIST Гагарина 2 2 Гагарина 12 1 +GET Голубей 13 4 +CREATE Венгербергская 5 1 417 +CREATE Лишняя 14 4 418 +LIST Каедвенская 13 3 Поменьпше 9 2 +RENAME Уральская Малая +GET Каедвенская 13 3 +GET Голубей 5 3 +CREATE Поменьпше 2 3 422 +RENAME Каедвенская Побольпше +GET Малая 16 3 +RENAME Сазанов Екатеринбургская +CREATE Лишняя 11 1 424 +LIST Голубей 1 1 Поменьпше 4 3 +CREATE Синяя 6 3 425 +LIST Голубей 6 3 Побольпше 10 4 +CREATE Лишняя 11 3 429 +GET Строителей 5 3 +LIST Голубей 1 1 Побольпше 16 2 +CREATE Строителей 8 1 432 +DELETE_STREET Голубей +CREATE Снегирей 11 1 433 +CREATE Гагарина 10 2 435 +LIST Венгербергская 8 3 Героев 13 4 +RENAME Венгербергская Владивосточная +CREATE Лишняя 8 3 437 +DELETE_STREET Фиолетовая +CREATE Зелёная 2 4 438 +CREATE Строителей 9 4 439 +CREATE Владивосточная 7 4 440 +CREATE Карельская 8 2 441 +RENAME Зелёная Томская +DELETE_HOUSE Карельская 8 +LIST Побольпше 5 3 Побольпше 6 3 +CREATE Малая 11 3 444 +DELETE_BLOCK Поменьпше 6 4 +GET Снегирей 11 1 +GET Томская 2 4 +CREATE Строителей 10 4 448 +GET Малая 6 4 +CREATE Томская 6 3 450 +CREATE Строителей 3 2 451 +CREATE Голубей 6 3 452 +GET Сазанов 4 3 +DELETE_BLOCK Малая 6 4 +DELETE_STREET Лишняя +LIST Гагарина 2 1 Поменьпше 4 4 +GET Гагарина 11 2 +DELETE_STREET Строителей +DELETE_BLOCK Побольпше 10 3 +RENAME Поменьпше Героев +GET Побольпше 6 2 +GET Владивосточная 11 2 +GET Голубей 6 3 +DELETE_STREET Центральная +RENAME Синяя Оранжевая +DELETE_HOUSE Владивосточная 7 +LIST Малая 14 2 Побольпше 9 4 +DELETE_STREET Снегирей +GET Центральная 14 1 +CREATE Малая 13 3 465 +GET Злая 16 1 +CREATE Оранжевая 3 2 467 +DELETE_BLOCK Злая 16 1 +CREATE Героев 16 4 469 +CREATE Злая 12 2 470 +GET Голубей 6 3 +CREATE Злая 6 4 472 +CREATE Злая 10 1 473 +GET Голубей 6 3 +LIST Владивосточная 9 3 Малая 16 4 +LIST Владивосточная 1 1 Воробьёв 16 1 +GET Гагарина 11 2 +DELETE_BLOCK Екатеринбургская 14 2 +CREATE Побольпше 10 3 480 +CREATE Голубей 16 4 481 +CREATE Малая 15 4 482 +CREATE Белая 6 4 483 +DELETE_STREET Владивосточная +CREATE Гагарина 8 4 485 +LIST Оранжевая 5 1 Побольпше 2 3 +CREATE Оранжевая 16 1 488 +CREATE Ривийская 5 4 489 +CREATE Голубей 9 2 490 +CREATE Малая 12 1 491 diff --git a/tests/homeworks/Homework_6/Homework_6_2/streets_results.txt b/tests/homeworks/Homework_6/Homework_6_2/streets_results.txt new file mode 100644 index 0000000..24c46a3 --- /dev/null +++ b/tests/homeworks/Homework_6/Homework_6_2/streets_results.txt @@ -0,0 +1,1561 @@ +Близкая 11 2 + + +Близкая 1 4 + +Близкая 11 2 +Близкая 11 3 + +Близкая 11 2 +Близкая 11 3 + +12 +12 +25 +Карельская 8 4 +Карельская 9 1 +Карельская 9 2 + +Братская 2 2 +Карельская 1 1 +Карельская 8 4 +Карельская 9 1 +Карельская 9 2 +Карельская 10 3 +Карельская 14 1 +Карельская 16 1 +Новиградская 12 3 +Одуванчиков 2 1 +Одуванчиков 13 2 +Одуванчиков 14 2 + +26 +38 +38 +Братская 1 2 +Братская 2 2 +Карельская 1 1 +Карельская 8 4 +Карельская 9 1 +Карельская 9 2 +Карельская 10 3 +Карельская 14 1 +Карельская 16 1 +Малая 12 3 +Одуванчиков 2 1 +Одуванчиков 8 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 2 + +Карельская 8 4 +Карельская 9 1 +Карельская 9 2 +Карельская 10 3 +Карельская 14 1 +Карельская 16 1 +Малая 12 3 +Одуванчиков 2 1 +Одуванчиков 8 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 2 + +27 +None +None +None +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 +Малая 12 3 +Одуванчиков 2 1 +Одуванчиков 8 1 +Одуванчиков 12 2 + +24 +54 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 + +Летняя 14 1 +Летняя 16 1 +Малая 12 3 +Малая 15 1 +Одуванчиков 2 1 +Одуванчиков 8 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 2 + +Летняя 1 1 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 + +Одуванчиков 2 1 +Одуванчиков 8 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 2 +Одуванчиков 16 1 + +66 +72 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 +Одуванчиков 2 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 + +Братская 12 2 +Братская 12 3 +Весенняя 1 2 +Весенняя 1 4 +Весенняя 2 2 +Весенняя 3 4 +Весенняя 9 4 +Летняя 1 1 +Летняя 2 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 +Одуванчиков 2 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 + +None +21 +66 +Летняя 14 1 +Летняя 16 1 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 + +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 + +Братская 1 4 +Братская 12 2 +Братская 12 3 +Весенняя 1 2 +Весенняя 1 4 +Весенняя 2 2 +Весенняя 3 4 +Весенняя 9 4 +Летняя 1 1 +Летняя 2 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 + +57 +62 +25 +Братская 12 2 +Братская 12 3 +Гагарина 1 2 +Гагарина 1 4 + +63 +Летняя 1 1 +Летняя 2 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 +Лишняя 5 2 +Лишняя 12 1 +Лишняя 13 2 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 12 2 + +66 +Братская 12 1 +Братская 12 2 +Братская 12 3 +Гагарина 1 2 +Гагарина 1 4 +Гагарина 2 2 +Гагарина 3 4 + +Братская 12 3 +Гагарина 1 2 +Гагарина 1 4 +Гагарина 2 2 +Гагарина 3 4 +Гагарина 7 3 +Гагарина 9 4 +Журавлиная 8 1 +Журавлиная 8 3 +Летняя 1 1 +Летняя 2 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 14 1 +Летняя 16 1 +Лишняя 2 2 +Лишняя 5 2 +Лишняя 12 1 +Лишняя 13 2 + +22 +48 +Лишняя 5 2 +Лишняя 12 1 +Лишняя 13 2 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 +Пескарёвая 1 4 +Пескарёвая 7 2 +Пескарёвая 9 2 +Пескарёвая 12 1 +Пескарёвая 12 2 +Пескарёвая 12 3 + +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 12 1 +Летняя 14 1 +Летняя 16 1 +Лишняя 2 2 + +None +22 +None +Ленинградская 1 2 +Ленинградская 1 4 +Ленинградская 2 2 +Ленинградская 3 4 +Ленинградская 7 3 +Ленинградская 9 4 +Летняя 1 1 +Летняя 2 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 12 1 +Летняя 14 1 +Летняя 16 1 +Лишняя 2 2 +Лишняя 5 2 +Лишняя 12 1 +Лишняя 13 2 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 7 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 +Пескарёвая 1 4 +Пескарёвая 7 2 +Пескарёвая 9 2 +Пескарёвая 12 1 +Пескарёвая 12 2 +Пескарёвая 12 3 +Сибирская 4 2 +Сибирская 16 1 +Таймырская 4 2 +Таймырская 12 4 +Фиолетовая 5 1 + +119 +101 +48 + +None +Ростовская 1 4 +Ростовская 5 4 +Ростовская 7 2 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 + +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 6 4 +Одуванчиков 7 1 +Одуванчиков 12 2 + +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 6 4 +Одуванчиков 7 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 +Победа 3 1 +Ростовская 1 2 +Ростовская 1 4 +Ростовская 5 4 +Ростовская 7 2 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 +Ростовская 12 2 +Ростовская 12 3 +Сибирская 4 2 +Сибирская 16 1 +Таймырская 9 4 +Таймырская 12 4 + +None +120 +Ленинградская 7 3 +Ленинградская 11 3 +Летняя 1 1 +Летняя 2 2 +Летняя 3 1 +Летняя 7 2 +Летняя 8 4 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 12 1 +Летняя 14 1 +Летняя 16 1 +Лишняя 2 2 +Лишняя 5 2 +Лишняя 12 1 +Лишняя 13 2 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 6 4 +Одуванчиков 7 1 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 16 1 +Победа 3 1 +Ростовская 1 2 +Ростовская 1 4 +Ростовская 5 4 +Ростовская 7 2 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 +Ростовская 12 2 +Ростовская 12 3 + +138 +62 +25 +Ленинградская 1 2 +Ленинградская 1 4 +Ленинградская 2 2 +Ленинградская 3 4 +Ленинградская 7 3 +Ленинградская 11 3 +Ленинградская 14 2 +Летняя 1 1 +Летняя 2 2 +Летняя 3 1 +Летняя 7 2 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 12 1 +Летняя 14 1 + +48 +149 +119 +Летняя 9 1 +Летняя 9 2 +Летняя 10 3 +Летняя 12 1 +Летняя 14 1 +Летняя 16 1 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 6 4 +Одуванчиков 7 1 +Одуванчиков 10 3 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 4 +Одуванчиков 16 1 +Победа 3 1 +Победа 11 4 +Ростовская 1 2 +Ростовская 1 4 +Ростовская 5 4 +Ростовская 7 2 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 +Ростовская 12 2 +Ростовская 12 3 +Ростовская 14 3 +Ростовская 16 4 +Таймырская 7 3 +Таймырская 9 4 +Таймырская 12 2 +Таймырская 12 4 +Фиолетовая 5 1 +Фиолетовая 7 2 + +None +146 +Ленинградская 7 3 +Ленинградская 11 3 +Ленинградская 14 2 +Одуванчиков 2 1 +Одуванчиков 3 3 +Одуванчиков 4 3 +Одуванчиков 6 4 +Одуванчиков 7 1 +Одуванчиков 10 3 +Одуванчиков 10 4 +Одуванчиков 12 2 +Одуванчиков 13 2 +Одуванчиков 14 2 +Одуванчиков 14 3 +Одуванчиков 15 4 +Одуванчиков 16 1 +Победа 3 1 +Победа 11 4 +Победа 12 1 +Ростовская 1 2 +Ростовская 1 4 +Ростовская 5 4 +Ростовская 7 2 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 +Ростовская 12 2 +Ростовская 12 3 +Ростовская 13 1 +Ростовская 14 3 + +30 +151 +30 +None +154 +None +163 +Восточная 6 4 +Восточная 7 1 +Восточная 9 2 +Восточная 10 3 +Восточная 10 4 +Восточная 11 2 +Восточная 12 2 +Восточная 13 2 +Восточная 14 2 +Восточная 14 3 +Восточная 15 4 +Восточная 16 1 +Ленинградская 1 2 +Ленинградская 1 4 +Ленинградская 2 2 +Ленинградская 3 4 +Ленинградская 6 2 +Ленинградская 7 3 +Ленинградская 11 3 +Ленинградская 12 3 +Ленинградская 14 2 +Ленинградская 16 1 + +Восточная 16 1 +Ленинградская 1 2 +Ленинградская 1 4 +Ленинградская 2 2 +Ленинградская 3 4 +Ленинградская 6 2 +Ленинградская 7 3 +Ленинградская 11 3 +Ленинградская 12 3 +Ленинградская 14 2 +Ленинградская 16 1 + +203 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 + +Грибоедова 12 4 +Грибоедова 16 3 +Ленинградская 1 2 +Ленинградская 1 4 +Ленинградская 2 2 +Ленинградская 3 4 +Ленинградская 6 2 +Ленинградская 7 3 +Ленинградская 11 3 +Ленинградская 12 3 +Ленинградская 14 2 +Ленинградская 16 1 +Ростовская 1 2 +Ростовская 1 4 +Ростовская 2 1 +Ростовская 2 4 +Ростовская 5 4 +Ростовская 9 2 +Ростовская 9 3 +Ростовская 12 1 +Ростовская 12 2 +Ростовская 12 3 +Ростовская 13 1 +Ростовская 14 3 +Ростовская 16 4 +Сибирская 16 4 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 9 1 +Фазанов 9 2 + +163 +93 +Восточная 2 1 +Восточная 3 3 +Восточная 4 3 +Восточная 6 4 +Восточная 7 1 +Восточная 9 1 +Восточная 9 2 +Восточная 10 3 +Восточная 10 4 +Восточная 11 2 +Восточная 12 2 +Восточная 13 2 +Восточная 14 2 +Восточная 14 3 +Восточная 15 4 +Восточная 16 1 + +80 +18 +196 +203 +None +None +196 +18 +None +Братская 7 3 +Братская 12 2 +Братская 12 4 +Братская 16 3 +Владивосточная 1 1 +Владивосточная 4 3 +Невская 1 2 +Невская 1 4 +Невская 2 2 +Невская 6 2 +Невская 7 3 +Невская 11 3 +Невская 12 3 +Невская 13 3 +Невская 14 1 +Невская 14 2 +Новосибирская 1 2 +Новосибирская 1 4 +Новосибирская 2 1 +Новосибирская 2 4 +Новосибирская 3 1 +Новосибирская 4 1 +Новосибирская 5 3 +Новосибирская 5 4 +Новосибирская 8 3 +Новосибирская 9 2 +Новосибирская 9 3 +Новосибирская 12 2 +Новосибирская 12 3 +Новосибирская 13 1 +Новосибирская 14 3 +Новосибирская 16 4 + +30 +Невская 1 2 +Невская 1 4 +Невская 2 2 +Невская 5 3 +Невская 6 2 +Невская 7 3 +Невская 11 3 +Невская 12 3 +Невская 13 3 +Невская 14 1 +Невская 14 2 +Новосибирская 1 2 +Новосибирская 1 4 +Новосибирская 2 1 +Новосибирская 2 4 +Новосибирская 3 1 + +84 +261 +228 +Невская 1 2 +Невская 1 4 +Невская 2 2 +Невская 5 3 +Невская 6 2 +Невская 7 3 +Невская 11 3 +Невская 12 3 +Невская 13 3 +Невская 14 1 +Невская 14 2 +Новосибирская 1 2 +Новосибирская 1 4 +Новосибирская 2 1 +Новосибирская 2 4 +Новосибирская 3 1 +Новосибирская 4 1 +Новосибирская 5 3 +Новосибирская 5 4 +Новосибирская 8 3 +Новосибирская 9 2 +Новосибирская 9 3 +Новосибирская 10 4 +Новосибирская 12 2 +Новосибирская 12 3 +Новосибирская 13 1 +Новосибирская 14 3 +Новосибирская 15 4 +Новосибирская 16 4 +Тверская 9 4 +Тверская 11 4 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 15 1 +Фазанов 16 1 + +249 +Новосибирская 1 4 +Новосибирская 2 1 +Новосибирская 2 4 +Новосибирская 3 1 +Новосибирская 4 1 +Новосибирская 5 3 +Новосибирская 5 4 +Новосибирская 8 3 +Новосибирская 9 2 +Новосибирская 9 3 +Новосибирская 10 4 +Новосибирская 12 2 +Новосибирская 12 3 +Новосибирская 13 1 +Новосибирская 14 3 +Новосибирская 15 4 +Новосибирская 16 4 +Тверская 9 4 +Тверская 11 4 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 16 1 + +264 +Владивосточная 3 1 +Владивосточная 4 3 +Владивосточная 6 4 +Невская 1 2 +Невская 1 4 +Невская 2 2 +Невская 3 3 +Невская 5 3 +Невская 6 2 +Невская 7 3 +Невская 11 3 +Невская 12 3 +Невская 13 3 +Невская 14 1 +Невская 14 2 + +225 +261 +Невская 7 3 +Невская 11 3 +Невская 12 3 +Невская 13 3 + +None +Невская 13 3 +Невская 14 1 +Невская 14 2 +Тверская 9 4 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 + +197 +287 +70 +265 +30 +287 +Воробьёв 5 4 +Воробьёв 8 3 +Воробьёв 9 2 +Воробьёв 9 3 +Воробьёв 10 4 +Воробьёв 11 2 +Воробьёв 12 2 +Воробьёв 12 3 +Воробьёв 13 1 +Воробьёв 14 3 +Воробьёв 15 4 +Воробьёв 16 4 +Мемная 13 3 +Невская 1 2 +Невская 1 4 +Невская 2 2 +Невская 3 3 +Невская 5 3 +Невская 6 2 +Невская 7 3 +Невская 8 3 +Невская 11 3 + +298 +257 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 + +None +Мемная 13 3 +Одуванчиков 8 1 +Одуванчиков 8 4 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 16 1 + +63 +247 +Мемная 13 3 +Одуванчиков 8 1 +Одуванчиков 8 4 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 + +None +Папская 3 3 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 11 3 + +Каедвенская 4 3 +Каедвенская 6 4 +Мемная 13 3 +Мемная 15 4 +Одуванчиков 8 1 +Одуванчиков 8 4 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 4 4 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 10 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 16 1 + +272 +282 +296 +Одуванчиков 4 4 +Одуванчиков 8 1 +Одуванчиков 8 4 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 4 4 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 10 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Папская 15 4 +Пушкина 16 4 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 + +None +Фазанов 5 1 + +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 + +None +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Папская 15 4 +Пушкина 1 4 +Пушкина 16 4 + +335 +282 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 13 4 +Дальневосточная 5 1 +Дальневосточная 9 1 +Дальневосточная 11 1 +Мемная 9 4 +Мемная 11 2 +Мемная 13 3 +Мемная 15 4 +Одуванчиков 4 4 +Одуванчиков 8 1 + +352 +None +325 +Венгербергская 8 3 +Венгербергская 9 4 +Венгербергская 11 2 +Венгербергская 13 3 +Венгербергская 15 4 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 13 4 +Дальневосточная 5 1 +Дальневосточная 9 1 +Дальневосточная 11 1 +Одуванчиков 4 4 +Одуванчиков 6 4 +Одуванчиков 8 1 +Одуванчиков 8 4 +Одуванчиков 14 2 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 4 4 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 10 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Папская 15 4 +Строителей 5 3 +Строителей 8 3 +Фазанов 1 3 +Фазанов 2 1 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 + +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 13 4 +Дальневосточная 5 1 +Дальневосточная 9 1 +Дальневосточная 11 1 +Одуванчиков 4 4 +Одуванчиков 6 4 +Одуванчиков 8 1 +Одуванчиков 8 4 +Одуванчиков 14 2 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 4 4 +Папская 5 3 +Папская 6 2 +Папская 7 3 +Папская 8 3 +Папская 10 3 +Папская 11 3 +Папская 12 3 +Папская 13 3 +Папская 14 1 +Папская 14 2 +Папская 15 4 +Строителей 5 3 +Строителей 8 3 +Фазанов 1 3 +Фазанов 2 1 +Фазанов 2 2 +Фазанов 3 1 + +Одуванчиков 14 2 +Папская 1 2 +Папская 1 4 +Папская 2 2 +Папская 3 3 +Папская 4 4 +Папская 5 3 +Папская 6 2 + +Строителей 7 3 +Фазанов 1 3 +Фазанов 2 1 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 15 4 +Фазанов 16 1 + +Венгербергская 1 1 +Венгербергская 3 2 +Венгербергская 8 3 +Венгербергская 9 4 +Венгербергская 11 2 +Венгербергская 13 3 +Венгербергская 15 4 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 13 4 +Запасная 5 1 +Запасная 9 1 +Запасная 11 1 +Каедвенская 1 2 +Каедвенская 1 4 +Каедвенская 2 2 +Каедвенская 3 3 +Каедвенская 4 4 +Каедвенская 5 3 +Каедвенская 6 2 +Каедвенская 7 3 +Каедвенская 8 3 +Каедвенская 10 3 +Каедвенская 11 3 +Каедвенская 12 3 +Каедвенская 13 3 +Каедвенская 14 1 +Каедвенская 14 2 +Каедвенская 15 4 +Московская 15 4 +Одуванчиков 6 4 +Одуванчиков 8 1 +Одуванчиков 8 4 +Одуванчиков 9 2 +Одуванчиков 14 2 +Строителей 5 3 +Строителей 7 3 +Фазанов 1 3 +Фазанов 2 1 +Фазанов 2 2 +Фазанов 3 1 +Фазанов 4 1 +Фазанов 5 1 +Фазанов 6 3 +Фазанов 7 2 +Фазанов 8 3 +Фазанов 9 1 +Фазанов 9 2 +Фазанов 10 3 +Фазанов 11 2 +Фазанов 12 1 +Фазанов 13 1 +Фазанов 14 1 +Фазанов 15 4 +Фазанов 16 1 + +None +None +245 +63 +Гагарина 13 1 +Гагарина 14 1 +Гагарина 15 4 +Гагарина 16 1 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 7 4 +Голубей 11 1 +Голубей 12 3 +Голубей 13 4 +Голубей 16 2 +Злая 5 4 +Злая 7 3 +Злая 14 4 +Каедвенская 1 2 +Каедвенская 1 4 +Каедвенская 2 2 +Каедвенская 3 3 + +374 +352 +None +411 +359 +Гагарина 2 2 +Гагарина 3 1 +Гагарина 4 1 +Гагарина 5 1 +Гагарина 6 3 +Гагарина 6 4 +Гагарина 7 2 +Гагарина 8 3 +Гагарина 9 1 +Гагарина 9 2 +Гагарина 10 3 +Гагарина 11 2 + +334 +Каедвенская 13 3 +Каедвенская 14 1 +Каедвенская 14 2 +Каедвенская 15 4 +Каедвенская 16 1 +Лишняя 14 4 +Поменьпше 4 3 +Поменьпше 5 1 +Поменьпше 6 4 +Поменьпше 9 1 + +235 +351 +391 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 7 4 +Голубей 11 1 +Голубей 12 3 +Голубей 13 4 +Голубей 16 2 +Екатеринбургская 14 2 +Злая 5 4 +Злая 7 3 +Злая 14 4 +Злая 16 1 +Лишняя 11 1 +Лишняя 14 4 +Малая 6 4 +Малая 8 1 +Малая 8 4 +Малая 9 2 +Малая 14 2 +Малая 16 3 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 +Побольпше 3 3 +Побольпше 4 4 +Побольпше 5 3 +Побольпше 6 2 +Побольпше 7 3 +Побольпше 8 3 +Побольпше 9 1 +Побольпше 10 3 +Побольпше 11 3 +Побольпше 12 3 +Побольпше 13 3 +Побольпше 14 1 +Побольпше 14 2 +Побольпше 15 4 +Побольпше 16 1 +Поменьпше 2 3 + +Голубей 6 4 +Голубей 7 4 +Голубей 11 1 +Голубей 12 3 +Голубей 13 4 +Голубей 16 2 +Екатеринбургская 14 2 +Злая 5 4 +Злая 7 3 +Злая 14 4 +Злая 16 1 +Лишняя 11 1 +Лишняя 14 4 +Малая 6 4 +Малая 8 1 +Малая 8 4 +Малая 9 2 +Малая 14 2 +Малая 16 3 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 +Побольпше 3 3 +Побольпше 4 4 +Побольпше 5 3 +Побольпше 6 2 +Побольпше 7 3 +Побольпше 8 3 +Побольпше 9 1 +Побольпше 10 3 + +356 +Голубей 1 1 +Голубей 2 2 +Голубей 3 1 +Голубей 4 3 +Голубей 5 3 +Голубей 6 4 +Голубей 7 4 +Голубей 11 1 +Голубей 12 3 +Голубей 13 4 +Голубей 16 2 +Екатеринбургская 14 2 +Злая 5 4 +Злая 7 3 +Злая 14 4 +Злая 16 1 +Лишняя 11 1 +Лишняя 11 3 +Лишняя 14 4 +Малая 6 4 +Малая 8 1 +Малая 8 4 +Малая 9 2 +Малая 14 2 +Малая 16 3 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 +Побольпше 3 3 +Побольпше 4 4 +Побольпше 5 3 +Побольпше 6 2 +Побольпше 7 3 +Побольпше 8 3 +Побольпше 9 1 +Побольпше 10 3 +Побольпше 11 3 +Побольпше 12 3 +Побольпше 13 3 +Побольпше 14 1 +Побольпше 14 2 +Побольпше 15 4 +Побольпше 16 1 + +Венгербергская 8 3 +Венгербергская 9 4 +Венгербергская 11 2 +Венгербергская 13 3 +Венгербергская 15 4 +Гагарина 1 3 +Гагарина 2 1 +Гагарина 2 2 +Гагарина 3 1 +Гагарина 4 1 +Гагарина 5 1 +Гагарина 6 3 +Гагарина 6 4 +Гагарина 7 2 +Гагарина 8 3 +Гагарина 9 1 +Гагарина 9 2 +Гагарина 10 2 +Гагарина 10 3 +Гагарина 11 2 +Гагарина 12 1 +Гагарина 13 1 +Гагарина 14 1 +Гагарина 15 4 +Гагарина 16 1 + +Побольпше 5 3 +Побольпше 6 2 + +433 +438 +364 +None +Гагарина 2 1 +Гагарина 2 2 +Гагарина 3 1 +Гагарина 4 1 +Гагарина 5 1 +Гагарина 6 3 +Гагарина 6 4 +Гагарина 7 2 +Гагарина 8 3 +Гагарина 9 1 +Гагарина 9 2 +Гагарина 10 2 +Гагарина 10 3 +Гагарина 11 2 +Гагарина 12 1 +Гагарина 13 1 +Гагарина 14 1 +Гагарина 15 4 +Гагарина 16 1 +Голубей 6 3 +Екатеринбургская 14 2 +Злая 5 4 +Злая 7 3 +Злая 14 4 +Злая 16 1 +Малая 8 1 +Малая 8 4 +Малая 9 2 +Малая 11 3 +Малая 14 2 +Малая 16 3 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 +Побольпше 3 3 +Побольпше 4 4 +Побольпше 5 3 +Побольпше 6 2 +Побольпше 7 3 +Побольпше 8 3 +Побольпше 9 1 +Побольпше 10 3 +Побольпше 11 3 +Побольпше 12 3 +Побольпше 13 3 +Побольпше 14 1 +Побольпше 14 2 +Побольпше 15 4 +Побольпше 16 1 +Поменьпше 2 3 +Поменьпше 4 3 + +247 +191 +338 +452 +Малая 14 2 +Малая 16 3 +Оранжевая 1 4 +Оранжевая 5 1 +Оранжевая 6 3 +Оранжевая 16 4 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 +Побольпше 3 3 +Побольпше 4 4 +Побольпше 5 3 +Побольпше 6 2 +Побольпше 7 3 +Побольпше 8 3 +Побольпше 9 1 + +None +414 +452 +452 +Владивосточная 9 4 +Владивосточная 11 2 +Владивосточная 13 3 +Владивосточная 15 4 +Гагарина 1 3 +Гагарина 2 1 +Гагарина 2 2 +Гагарина 3 1 +Гагарина 4 1 +Гагарина 5 1 +Гагарина 6 3 +Гагарина 6 4 +Гагарина 7 2 +Гагарина 8 3 +Гагарина 9 1 +Гагарина 9 2 +Гагарина 10 2 +Гагарина 10 3 +Гагарина 11 2 +Гагарина 12 1 +Гагарина 13 1 +Гагарина 14 1 +Гагарина 15 4 +Гагарина 16 1 +Героев 2 3 +Героев 4 3 +Героев 5 1 +Героев 9 1 +Героев 11 1 +Героев 16 4 +Голубей 6 3 +Екатеринбургская 14 2 +Злая 5 4 +Злая 6 4 +Злая 7 3 +Злая 10 1 +Злая 12 2 +Злая 14 4 +Малая 8 1 +Малая 8 4 +Малая 9 2 +Малая 11 3 +Малая 13 3 +Малая 14 2 +Малая 16 3 + +Владивосточная 1 1 +Владивосточная 3 1 +Владивосточная 3 2 +Владивосточная 5 1 +Владивосточная 8 3 +Владивосточная 9 4 +Владивосточная 11 2 +Владивосточная 13 3 +Владивосточная 15 4 + +247 +Оранжевая 5 1 +Оранжевая 6 3 +Оранжевая 16 4 +Побольпше 1 2 +Побольпше 1 4 +Побольпше 2 2 + diff --git a/tests/homeworks/Homework_6/Homework_6_2/test_streets.py b/tests/homeworks/Homework_6/Homework_6_2/test_streets.py new file mode 100644 index 0000000..7bc65e7 --- /dev/null +++ b/tests/homeworks/Homework_6/Homework_6_2/test_streets.py @@ -0,0 +1,472 @@ +import pytest +import tempfile +from src.homework.Homework_6.avl_tree import TreeMap, TreeNode, create_tree_map +from src.homework.Homework_6.Homework_6_2.streets import ( + is_correct_address, + create, + get, + delete_block, + delete_house, + delete_street, + get_list_addresses, + rename, + run_static_mode, +) + + +FILE_LOGS = "tests/homeworks/Homework_6/Homework_6_2/streets_logs.txt" +FILE_RESULTS = "tests/homeworks/Homework_6/Homework_6_2/streets_results.txt" + + +def create_dummy_directory(directory_elements): + dummy_directory = create_tree_map() + for address, index in directory_elements: + create(dummy_directory, address, index) + return dummy_directory + + +@pytest.mark.parametrize( + "address,expected", + ( + (["Юбилейный", "12", "6"], True), + (["Петроградская", "8"], False), + (["A", "B", "C"], False), + (["Чечеренская", "12a", "2"], False), + (["Ломакино", "13", "3", "1"], False), + (["Бульварная"], False), + (["Ивановская", "9.75", "14"], False), + ), +) +def test_is_correct_address(address, expected): + function = is_correct_address(address) + assert function == expected + + +@pytest.mark.parametrize( + "directory_elements,expected", + ( + ( + ((("Центральная", "12", "21"), 787856),), + TreeMap( + root=TreeNode( + key=("Центральная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ( + (("Юбилейная", "1", "2"), 121), + (("Юбилейная", "12", "2"), 119), + (("Юбилейная", "1", "20"), 118), + ), + TreeMap( + root=TreeNode( + key=("Юбилейная", 1, 20), + value=118, + left=TreeNode( + key=("Юбилейная", 1, 2), + value=121, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=("Юбилейная", 12, 2), + value=119, + left=None, + right=None, + height=0, + size=1, + ), + height=1, + size=3, + ) + ), + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "1", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + TreeMap( + root=TreeNode( + key=("Лесная", 7, 8), + value=12000, + left=TreeNode( + key=("Лесная", 1, 2), + value=12100, + left=None, + right=TreeNode( + key=("Лесная", 1, 20), + value=11800, + left=None, + right=None, + height=0, + size=1, + ), + height=1, + size=2, + ), + right=TreeNode( + key=("Садовая", 3, 90), + value=11900, + left=None, + right=None, + height=0, + size=1, + ), + height=2, + size=4, + ) + ), + ), + ), +) +def test_create(directory_elements, expected): + dummy_directory = create_dummy_directory(directory_elements) + assert dummy_directory == expected + + +@pytest.mark.parametrize( + "directory_elements,address,expected", + ( + ( + ((("Центральная", "12", "21"), 787856),), + ["Центральная", "12", "21"], + "787856", + ), + (((("Центральная", "12", "21"), 787856),), ["Центральная", "1", "1"], "None"), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "1", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + ["Весенняя", "12", "23"], + "None", + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "1", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + ["Лесная", "1", "20"], + "11800", + ), + ), +) +def test_get(directory_elements, address, expected): + dummy_directory = create_dummy_directory(directory_elements) + function = get(dummy_directory, address) + assert function == expected + + +@pytest.mark.parametrize( + "directory_elements,address,expected", + ( + ((), ["Ивановская", "13", "4"], TreeMap(root=None)), + ( + ((("Центральная", "12", "21"), 787856),), + ["Центральная", "12", "21"], + TreeMap(root=None), + ), + ( + ((("Центральная", "12", "21"), 787856),), + ["Центральная", "34", "1"], + TreeMap( + root=TreeNode( + key=("Центральная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "1", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + ["Садовая", "3", "90"], + TreeMap( + root=TreeNode( + key=("Лесная", 1, 20), + value=11800, + left=TreeNode( + key=("Лесная", 1, 2), + value=12100, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=("Лесная", 7, 8), + value=12000, + left=None, + right=None, + height=0, + size=1, + ), + height=1, + size=3, + ) + ), + ), + ), +) +def test_delete_block(directory_elements, address, expected): + dummy_directory = create_dummy_directory(directory_elements) + delete_block(dummy_directory, address) + assert dummy_directory == expected + + +@pytest.mark.parametrize( + "directory_elements,street,house,expected", + ( + ((), "Ивановская", 13, TreeMap(root=None)), + ( + ((("Центральная", "12", "21"), 787856),), + "Центральная", + 12, + TreeMap(root=None), + ), + ( + ((("Центральная", "12", "21"), 787856),), + "Центральная", + 34, + TreeMap( + root=TreeNode( + key=("Центральная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "7", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + "Лесная", + 7, + TreeMap( + root=TreeNode( + key=("Садовая", 3, 90), + value=11900, + left=TreeNode( + key=("Лесная", 1, 20), + value=11800, + left=None, + right=None, + height=0, + size=1, + ), + right=None, + height=1, + size=2, + ) + ), + ), + ), +) +def test_delete_house(directory_elements, street, house, expected): + dummy_directory = create_dummy_directory(directory_elements) + delete_house(dummy_directory, street, house) + assert dummy_directory == expected + + +@pytest.mark.parametrize( + "directory_elements,street,expected", + ( + ((), "Ивановская", TreeMap(root=None)), + (((("Центральная", "12", "21"), 787856),), "Центральная", TreeMap(root=None)), + ( + ((("Центральная", "12", "21"), 787856),), + "Бульварная", + TreeMap( + root=TreeNode( + key=("Центральная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "7", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + "Лесная", + TreeMap( + root=TreeNode( + key=("Садовая", 3, 90), + value=11900, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ), +) +def test_delete_street(directory_elements, street, expected): + dummy_directory = create_dummy_directory(directory_elements) + delete_street(dummy_directory, street) + assert dummy_directory == expected + + +@pytest.mark.parametrize( + "directory_elements,address_1,address_2,expected", + ( + ((), ["Строительная", "12", "3"], ["Строительная", "12", "34"], "\n"), + ( + ((("Центральная", "12", "21"), 787856),), + ["Центральная", "11", "3"], + ["Центральная", "12", "34"], + "Центральная 12 21\n\n", + ), + ( + ((("Центральная", "12", "21"), 787856),), + ["Строительная", "12", "3"], + ["Строительная", "12", "34"], + "\n", + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "7", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + ["Лесная", "1", "1"], + ["Лесная", "90", "1"], + "Лесная 1 20\nЛесная 7 2\nЛесная 7 8\n\n", + ), + ), +) +def test_get_list(directory_elements, address_1, address_2, expected): + dummy_directory = create_dummy_directory(directory_elements) + function = get_list_addresses(dummy_directory, address_1, address_2) + assert function == expected + + +@pytest.mark.parametrize( + "directory_elements,old_street,new_street,expected", + ( + ((), "Центральная", "Ивановская", TreeMap(root=None)), + ( + ((("Центральная", "12", "21"), 787856),), + "Мемная", + "Центральная", + TreeMap( + root=TreeNode( + key=("Центральная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ((("Центральная", "12", "21"), 787856),), + "Центральная", + "Мемная", + TreeMap( + root=TreeNode( + key=("Мемная", 12, 21), + value=787856, + left=None, + right=None, + height=0, + size=1, + ) + ), + ), + ( + ( + (("Лесная", "7", "8"), 12000), + (("Лесная", "1", "2"), 12100), + (("Садовая", "3", "90"), 11900), + (("Лесная", "1", "20"), 11800), + ), + "Лесная", + "Морская", + TreeMap( + root=TreeNode( + key=("Морская", 1, 20), + value=11800, + left=TreeNode( + key=("Морская", 1, 2), + value=12100, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=("Садовая", 3, 90), + value=11900, + left=TreeNode( + key=("Морская", 7, 8), + value=12000, + left=None, + right=None, + height=0, + size=1, + ), + right=None, + height=1, + size=2, + ), + height=2, + size=4, + ) + ), + ), + ), +) +def test_rename(directory_elements, old_street, new_street, expected): + dummy_directory = create_dummy_directory(directory_elements) + rename(dummy_directory, old_street, new_street) + assert dummy_directory == expected + + +def test_static_mode(): + with tempfile.NamedTemporaryFile(mode="w+", delete=False) as templ_file: + test_file = templ_file.name + directory = create_tree_map() + run_static_mode(directory, FILE_LOGS, test_file) + with open(test_file, mode="r") as file, open( + FILE_RESULTS, mode="r", encoding="utf-8" + ) as expected: + for i in range(1562): + assert file.readline() == expected.readline() diff --git a/tests/homeworks/Homework_6/test_avl_2.py b/tests/homeworks/Homework_6/test_avl_2.py new file mode 100644 index 0000000..43faeb5 --- /dev/null +++ b/tests/homeworks/Homework_6/test_avl_2.py @@ -0,0 +1,617 @@ +import pytest +from src.homework.Homework_6.avl_tree import ( + TreeMap, + TreeNode, + create_tree_map, + put, + join, + split, + get_all_keys, + remove_keys, +) + + +def create_dummy_tree(tree_elements): + dummy_tree = create_tree_map() + for key, value in tree_elements: + put(dummy_tree, key, value) + return dummy_tree + + +@pytest.mark.parametrize( + "tree_elements,key,expected", + ( + ((), 12, (TreeMap(root=None), TreeMap(root=None))), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 12, + ( + TreeMap( + root=TreeNode( + key=7, + value=7, + left=TreeNode( + key=3, + value=3, + left=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, + value=0, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=2, + value=2, + left=None, + right=None, + height=0, + size=1, + ), + height=1, + size=3, + ), + right=TreeNode( + key=5, + value=5, + left=TreeNode( + key=4, + value=4, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=6, + value=6, + left=None, + right=None, + height=0, + size=1, + ), + height=1, + size=3, + ), + height=2, + size=7, + ), + right=TreeNode( + key=9, + value=9, + left=TreeNode( + key=8, value=8, left=None, right=None, height=0, size=1 + ), + right=None, + height=1, + size=2, + ), + height=3, + size=10, + ) + ), + TreeMap(root=None), + ), + ), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 0, + ( + TreeMap(root=None), + TreeMap( + root=TreeNode( + key=7, + value=7, + left=TreeNode( + key=5, + value=5, + left=TreeNode( + key=4, + value=4, + left=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, + value=0, + left=None, + right=None, + height=0, + size=1, + ), + right=TreeNode( + key=3, + value=3, + left=TreeNode( + key=2, + value=2, + left=None, + right=None, + height=0, + size=1, + ), + right=None, + height=1, + size=2, + ), + height=2, + size=4, + ), + right=None, + height=3, + size=5, + ), + right=TreeNode( + key=6, value=6, left=None, right=None, height=0, size=1 + ), + height=4, + size=7, + ), + right=TreeNode( + key=8, + value=8, + left=None, + right=TreeNode( + key=9, value=9, left=None, right=None, height=0, size=1 + ), + height=1, + size=2, + ), + height=5, + size=10, + ) + ), + ), + ), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 5, + ( + TreeMap( + root=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, value=0, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=3, + value=3, + left=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=4, value=4, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + height=2, + size=5, + ) + ), + TreeMap( + root=TreeNode( + key=8, + value=8, + left=TreeNode( + key=6, + value=6, + left=TreeNode( + key=5, value=5, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=7, value=7, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + right=TreeNode( + key=9, value=9, left=None, right=None, height=0, size=1 + ), + height=2, + size=5, + ) + ), + ), + ), + ), +) +def test_split_tree(tree_elements, key, expected): + dummy_tree = create_dummy_tree(tree_elements) + function = split(dummy_tree, key) + assert function == expected + + +@pytest.mark.parametrize( + "tree_elements,another_elements,expected", + ( + ((), (), TreeMap(root=None)), + ( + ((0, 0), (1, 1), (2, 2)), + (), + TreeMap( + root=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, value=0, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ) + ), + ), + ( + ((0, 0), (1, 1), (2, 2)), + ((6, 6), (7, 7), (8, 8)), + TreeMap( + root=TreeNode( + key=6, + value=6, + left=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, value=0, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + right=TreeNode( + key=7, + value=7, + left=None, + right=TreeNode( + key=8, value=8, left=None, right=None, height=0, size=1 + ), + height=1, + size=2, + ), + height=2, + size=6, + ) + ), + ), + ( + ((10, 10), (11, 11), (12, 12)), + ((2, 2), (3, 3)), + TreeMap( + root=TreeNode( + key=11, + value=11, + left=TreeNode( + key=3, + value=3, + left=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=10, value=10, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + right=TreeNode( + key=12, value=12, left=None, right=None, height=0, size=1 + ), + height=2, + size=5, + ) + ), + ), + ( + ((101, 101),), + ((13, 13), (14, 14), (15, 15), (16, 16)), + TreeMap( + root=TreeNode( + key=14, + value=14, + left=TreeNode( + key=13, value=13, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=16, + value=16, + left=TreeNode( + key=15, value=15, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=101, value=101, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + height=2, + size=5, + ) + ), + ), + ), +) +def test_join_tree(tree_elements, another_elements, expected): + dummy_tree = create_dummy_tree(tree_elements) + another_dummy_tree = create_dummy_tree(another_elements) + function = join(dummy_tree, another_dummy_tree) + assert function == expected + + +@pytest.mark.parametrize( + "tree_elements,left,right,expected", + ( + ((), 0, 0, []), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 0, + 0, + [], + ), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 0, + 1, + [0], + ), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 5, + 8, + [5, 6, 7], + ), + (((13, 13), (14, 14), (15, 15), (16, 16)), 16, 1000, [16]), + ( + ((16, 16), (9, 9), (-123, -123), (0, 0), (1, 1)), + -200, + 200, + [-123, 0, 1, 9, 16], + ), + ), +) +def test_get_all_keys(tree_elements, left, right, expected): + dummy_tree = create_dummy_tree(tree_elements) + function = get_all_keys(dummy_tree, left, right) + assert function == expected + + +@pytest.mark.parametrize( + "tree_elements,left,right,expected", + ( + ((), 0, 15, TreeMap(root=None)), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 12, + 14, + TreeMap( + root=TreeNode( + key=7, + value=7, + left=TreeNode( + key=3, + value=3, + left=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, value=0, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + right=TreeNode( + key=5, + value=5, + left=TreeNode( + key=4, value=4, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=6, value=6, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + height=2, + size=7, + ), + right=TreeNode( + key=9, + value=9, + left=TreeNode( + key=8, value=8, left=None, right=None, height=0, size=1 + ), + right=None, + height=1, + size=2, + ), + height=3, + size=10, + ) + ), + ), + ( + ( + (0, 0), + (1, 1), + (2, 2), + (3, 3), + (4, 4), + (5, 5), + (6, 6), + (7, 7), + (8, 8), + (9, 9), + ), + 6, + 9, + TreeMap( + root=TreeNode( + key=3, + value=3, + left=TreeNode( + key=1, + value=1, + left=TreeNode( + key=0, value=0, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=2, value=2, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + right=TreeNode( + key=5, + value=5, + left=TreeNode( + key=4, value=4, left=None, right=None, height=0, size=1 + ), + right=TreeNode( + key=9, value=9, left=None, right=None, height=0, size=1 + ), + height=1, + size=3, + ), + height=2, + size=7, + ) + ), + ), + ( + ((9, 9), (12, 12), (101, 101), (-12, -12), (76, 76)), + -20, + 200, + TreeMap(root=None), + ), + ), +) +def test_remove_keys(tree_elements, left, right, expected): + dummy_tree = create_dummy_tree(tree_elements) + remove_keys(dummy_tree, left, right) + assert dummy_tree == expected + + +@pytest.mark.parametrize( + "tree_elements,left,right", + ( + ((), 12, 3), + (((12, 12), (3, 3), (40, 40), (-31, -31)), 90, 0), + ((("a", 0), ("acb", 12), ("cbd", 144)), "bd", "ac"), + ( + ((("ab", 1), 10), (("bd", 2), 13), (("nnn", 3), 16)), + ("test", 13), + ("test", 1), + ), + ), +) +def test_error_get_all_keys(tree_elements, left, right): + dummy_tree = create_dummy_tree(tree_elements) + with pytest.raises(ValueError): + get_all_keys(dummy_tree, left, right) + + +@pytest.mark.parametrize( + "tree_elements,left,right", + ( + ((), 36, 35), + (((12, 12), (3, 3), (40, 40), (-31, -31)), 101, -101), + ((("a", 0), ("acb", 12), ("cbd", 144)), "bdc", "bd"), + ( + ((("ab", 1), 10), (("bd", 2), 13), (("nnn", 3), 16)), + ("test", 13), + ("test", 12), + ), + ), +) +def test_error_get_all_keys(tree_elements, left, right): + dummy_tree = create_dummy_tree(tree_elements) + with pytest.raises(ValueError): + remove_keys(dummy_tree, left, right) From 0e1770d8d7b40fc9d12c4108a8fdd1a5d17f1a6c Mon Sep 17 00:00:00 2001 From: Mmorgenn Date: Fri, 15 Dec 2023 02:14:37 +0300 Subject: [PATCH 2/2] fix: fixed the file path --- src/homework/Homework_6/Homework_6_2/streets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/homework/Homework_6/Homework_6_2/streets.py b/src/homework/Homework_6/Homework_6_2/streets.py index 48749da..d090024 100644 --- a/src/homework/Homework_6/Homework_6_2/streets.py +++ b/src/homework/Homework_6/Homework_6_2/streets.py @@ -1,5 +1,5 @@ from os.path import exists -from src.homeworks.Homework_6.avl_tree import * +from src.homework.Homework_6.avl_tree import * def check_files(file_input, file_output):