def test_is_inside_rotated_box(self):
        box = ConstructionBox(angle=67)
        assert box.is_inside((0, 0)) is True
        # on border is inside
        assert box.is_inside(box[0]) is True
        assert box.is_inside(box[1]) is True
        assert box.is_inside(box[2]) is True
        assert box.is_inside(box[3]) is True

        # outside
        assert box.is_inside((1, 1)) is False
        assert box.is_inside((-1, -1)) is False
        assert box.is_inside((-1, +1)) is False
        assert box.is_inside((+1, -1)) is False
def test_issue_2020_01_30():
    box = ConstructionBox((0.22499999999999978, -6.15), 1.0, 0.4, 270.0)
    start = (-1.4349395363018706e-16, -7.25)
    end = (-2.1084952758329149e-16, -6.15)
    assert box.is_inside(start) is False
    assert box.is_inside(end) is False
    def test_is_inside_horiz_box(self):
        box = ConstructionBox()
        assert box.is_inside((0, 0)) is True
        # on border is inside
        assert box.is_inside((0.5, 0.5)) is True
        assert box.is_inside(box[0]) is True
        assert box.is_inside(box[1]) is True
        assert box.is_inside(box[2]) is True
        assert box.is_inside(box[3]) is True

        # outside
        assert box.is_inside((1, 1)) is False
        assert box.is_inside((-1, -1)) is False
        assert box.is_inside((-1, +1)) is False
        assert box.is_inside((+1, -1)) is False

        # outside but on extension lines
        assert box.is_inside((1, 0.5)) is False
        assert box.is_inside((-1, -0.5)) is False
        assert box.is_inside((-1, 0.5)) is False
        assert box.is_inside((+1, -0.5)) is False