class TestPoint: # Инициализация (выполняется для каждого из тестов класса) def setup_method(self): self.f = Point(R2Point(0.0, 0.0)) # Одноугольник является фигурой def test_figure(self): assert isinstance(self.f, Figure) # Конструктор порождает экземпляр класса Point (одноугольник) def test_point(self): assert isinstance(self.f, Point) # Периметр одноугольника нулевой def test_perimeter(self): assert self.f.perimeter() == 0.0 # Площадь одноугольника нулевая def test_аrea(self): assert self.f.area() == 0.0 # При добавлении точки одноугольник может не измениться def test_add1(self): assert self.f.add(R2Point(0.0, 0.0)) is self.f # При добавлении точки одноугольник может превратиться в двуугольник def test_add2(self): assert isinstance(self.f.add(R2Point(1.0, 0.0)), Segment)
def test_g73_rect_x_lay_trian_trian_throught_border_three(self): # Сразу создаем прямоугольник Figure.rectangle = Rectangle(R2Point(0.0, 0.0), R2Point(2.0, 1.0)) t = Point(R2Point(1.0, 0.0)) t = t.add(R2Point(1.0, 1.0)) t = t.add(R2Point(3.0, 2.0)) # Общая площадь должна быть 0.5 assert t.g73() == approx(0.5)
def test_g73_rect_x_lay_trian_up1(self): # Сразу создаем прямоугольник Figure.rectangle = Rectangle(R2Point(0.0, 0.0), R2Point(2.0, 1.0)) t = Point(R2Point(0.0, 2.0)) t = t.add(R2Point(2.0, 0.0)) t = t.add(R2Point(2.0, 2.0)) # Общая площадь должна быть 0.5 (четверть прямоугольника) assert t.g73() == approx(0.5)
def test_g73_trian_big_upper(self): Figure.rectangle = Rectangle() # Сразу создаем прямоугольник # Сначала делаем отрезок t = Point(R2Point(-2.0, 2.0)) t = t.add(R2Point(-2.0, -2.0)) # Соединяем с третьей точкой -> Получаем большой треугольник t = t.add(R2Point(2.0, 2.0)) # Общая площадь должна быть 2 (половина квадрата) assert t.g73() == approx(2.0)
def test_g73_rect_x_lay_same_line3(self): # Сразу создаем прямоугольник Figure.rectangle = Rectangle(R2Point(-1.0, 0.0), R2Point(3.0, 1.0)) t = Point(R2Point(1.0, 1.0)) t = t.add(R2Point(2.0, 2.0)) t = t.add(R2Point(0.0, 2.0)) t = t.add(R2Point(2.0, 1.0)) t = t.add(R2Point(0.0, 2.0)) t = t.add(R2Point(0.0, 1.0)) t = t.add(R2Point(-1.0, 2.0)) t = t.add(R2Point(-1.0, 1.0)) t = t.add(R2Point(3.0, 2.0)) t = t.add(R2Point(3.0, 1.0)) # Общая площадь должна быть 0.0 (пересечения лишь по верхней границе) assert t.g73() == 0.0
def test_g73_not_crossing(self): Figure.rectangle = Rectangle() # Сразу создаем прямоугольник # Сначала делаем отрезок t = Point(R2Point(-1.0, 2.0)) t = t.add(R2Point(1.0, 2.0)) # Соединяем с третьей точкой -> Получаем треугольник t = t.add(R2Point(1.0, 3.0)) # Соединяем с четвертой точкой -> Получаем полосочку ВЫШЕ нашего квадрата и не пересекающего его t = t.add(R2Point(-1.0, 3.0)) # Общая площадь равна площади полоски, т.е. тоже единица assert t.g73() == 0.0
def test_g73_x_elongated(self): Figure.rectangle = Rectangle() # Сразу создаем прямоугольник # Сначала делаем отрезок t = Point(R2Point(-2.0, -1.0)) t = t.add(R2Point(2.0, -1.0)) # Соединяем с третьей точкой -> Получаем треугольник t = t.add(R2Point(2.0, 1.0)) # Соединяем с четвертой точкой -> Получаем вытянутый прямоугольник t = t.add(R2Point(-2.0, 1.0)) # Но общая-то площадь измениться всё-равно не должна assert t.g73() == approx(4.0)
def read_gallery(lines) -> Gallery: gallery = Gallery() gallery_size = int(next(lines)) if gallery_size < 3 or gallery_size > 50: gallery.error = 'Gallery size must be 3 <= SIZE <= 50' return gallery line_number = 0 while line_number < gallery_size: x, y = list(map(lambda item: int(item), next(lines).split(' '))) if x < 0 or x > 1000 or y < 0 or y > 1000: gallery.error = f'Gallery point ({x}, {y}) is invalid. Must be 0 <= x,y <= 1000' gallery.points = [] return gallery gallery.points.append(Point(x, y)) line_number += 1 return gallery
def setup_method(self): self.f = Point(R2Point(0.0, 0.0)) Figure.fixed_point = R2Point(1.0, 0.0)
def test_g73_zero_segment(self): Figure.rectangle = Rectangle() # Сразу создаем прямоугольник t = Point(R2Point(-1.0, -1.0)) t = t.add(R2Point(1.0, 1.0)) assert t.g73() == 0.0
def setup_method(self): self.f = Point(R2Point(0.0, 0.0))