2026-rff_mp/skorohodovsa/task_2/test/map/test_maze.py
SerKin0 f7577f803c [2] Добавлено:
- Тесты на классы Cell, Maze
- Алгоритмы поиска пути: BFS, DFS, Astar
2026-05-24 17:17:02 +03:00

111 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pytest
import random
random.seed("РФ СЛФ!")
from source.models.base import Cell, Maze
from source.settings import cell_mapping
class TestMaze:
def test_default_size(self):
"""Проверка размеров лабиринта со значениями по умолчанию"""
maze = Maze()
row, col = maze.shape
assert row == 10
assert col == 10
def test_custom_size(self):
"""Проверка размеров лабиринта с заданными размерами"""
maze = Maze(size=(7, 3))
assert maze._width == 7
assert maze._height == 3
def test_all_cells_empty_on_init(self):
"""Проверка создания пустого лабиринта с заданными размерами"""
maze = Maze(size=(3, 3))
for y in range(3):
for x in range(3):
cell = maze.get_cell(x, y)
assert not cell.is_wall
assert not cell.is_start
assert not cell.is_exit
def test_get_cell_valid(self):
"""Проверка получения объекта Cell из лабиринта функцией `get_cell()`"""
maze = Maze(size=(5, 5))
assert isinstance(maze.get_cell(2, 3), Cell)
def test_get_cell_out_of_bounds(self):
"""Проверка неправильных указанных индексов лабиринта"""
maze = Maze(size=(5, 5))
assert maze.get_cell(-1, 0) is None
assert maze.get_cell(0, -1) is None
assert maze.get_cell(5, 0) is None
assert maze.get_cell(0, 5) is None
def test_center_has_four_neighbors(self):
"""Проверка нахождения соседей"""
maze = Maze(size=(5, 5))
assert len(maze.get_neighbors(2, 2)) == 4
def test_corner_has_two_neighbors(self):
"""Проверка нахождения соседей, когда указанное поле в углу лабиринта"""
maze = Maze(size=(5, 5))
assert len(maze.get_neighbors(0, 0)) == 2
def test_wall_excluded_from_neighbors(self):
"""Проверка что стена не попадает в список соседей"""
maze = Maze(size=(5, 5))
maze[1, 2] = cell_mapping['wall']
assert all(not n.is_wall for n in maze.get_neighbors(2, 2))
def test_setitem_wall(self):
"""Проверка установки стены через оператор []"""
maze = Maze(size=(5, 5))
maze[0, 0] = cell_mapping['wall']
assert maze[0, 0].is_wall is True
def test_setitem_start(self):
"""Проверка установки старта через оператор []"""
maze = Maze(size=(5, 5))
maze[0, 0] = cell_mapping['start']
assert maze[0, 0].is_start is True
def test_setitem_exit(self):
"""Проверка установки выхода через оператор []"""
maze = Maze(size=(5, 5))
maze[0, 0] = cell_mapping['exit']
assert maze[0, 0].is_exit is True
def test_setitem_empty_clears_flags(self):
"""Проверка сброса флагов клетки при установке пустого типа"""
maze = Maze(size=(5, 5))
maze[0, 0] = cell_mapping['wall']
maze[0, 0] = cell_mapping['empty']
assert not maze[0, 0].is_wall
def test_getitem_out_of_bounds_raises(self):
"""Проверка выброса IndexError при обращении к клетке вне границ лабиринта"""
maze = Maze(size=(5, 5))
with pytest.raises(IndexError):
_ = maze[10, 10]
def test_setitem_invalid_symbol_raises(self):
"""Проверка выброса ValueError при установке неизвестного символа"""
maze = Maze(size=(5, 5))
with pytest.raises(ValueError):
maze[0, 0] = "?"
def test_str_lines_match_height(self):
"""Проверка что количество строк в строковом представлении совпадает с высотой"""
maze = Maze(size=(4, 6))
print(str(maze).splitlines())
assert len(str(maze).splitlines()) == 6
def test_str_line_length_matches_width(self):
"""Проверка что длина каждой строки в строковом представлении совпадает с шириной"""
maze = Maze(size=(5, 3))
for line in str(maze).strip().splitlines():
assert len(line) == 5