Пример #1
0
 def shape(self, args):
     shape = args[0]
     points = args[1]
     if shape == 'line':
         if len(points) < 2:
             raise ValueError(
                 "The shape 'line' should have 2 points or more")
         vectors = [
             Vector(start_point=point1, end_point=point2)
             for point1, point2 in combinations(points, 2)
         ]
         angles = [
             Angle(vector1=vec1, vector2=vec2, size=180)
             for vec1, vec2 in combinations(vectors, 2)
         ]
         res = frozenset(chain(vectors, angles))
         return res
     elif shape == 'polygon':
         if len(points) < 3:
             raise ValueError(
                 "The shape 'polygon' should have 3 points or more")
         vectors = [
             Vector(start_point=points[i],
                    end_point=points[(i + 1) % len(points)])
             for i in range(len(points))
         ]
         angles = [
             Angle(vector1=vectors[i],
                   vector2=vectors[(i + 1) % len(vectors)])
             for i in range(len(vectors))
         ]
         res = frozenset(chain(vectors, angles))
         return res
     raise ValueError(f"Unknown shape: '{shape}'")
Пример #2
0
def test_SumAngles_on_second_empty_adds_nothing(sqlalchemy_information,
                                                memory_session):
    angle1 = Angle(vector1=Vector(start_point='A', end_point='B'),
                   vector2=Vector(start_point='C', end_point='D'),
                   size=30)
    angle2 = Angle(vector1=angle1.vector2,
                   vector2=Vector(start_point='E', end_point='F'))

    memory_session.add_all([angle1, angle2])
    memory_session.commit()

    tested_rule = SumAngles()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 2
Пример #3
0
 def execute(self, session):
     vector1 = Vector(start_point='A', end_point='B')
     vector2 = Vector(start_point='D', end_point='C')
     session.add_all(
         [vector1, vector2,
          Angle(vector1=vector1, vector2=vector2)])
     session.commit()
Пример #4
0
 def execute(self, session: Session):
     angle = aliased(Angle, name="angle1")
     angles = session.query(angle.vector_id2, angle.vector_id1, 360 -
                            angle.size).filter(angle.size != None).all()
     mapper = lambda ang: Angle(
         vector_id1=ang[0], vector_id2=ang[1], size=ang[2])
     new_angles = list(map(mapper, angles))
     session.add_all(new_angles)
     session.commit()
Пример #5
0
def test_SumAngles(sqlalchemy_information, memory_session):
    angle1 = Angle(vector1=Vector(start_point='A', end_point='B'),
                   vector2=Vector(start_point='C', end_point='D'),
                   size=30)
    angle2 = Angle(vector1=angle1.vector2,
                   vector2=Vector(start_point='E', end_point='F'),
                   size=60)

    memory_session.add_all([angle1, angle2])
    memory_session.commit()

    tested_rule = SumAngles()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 3
    result = memory_session.query(Angle).filter_by(
        vector_id1=angle1.vector_id1, vector_id2=angle2.vector_id2).first()
    assert result.size == angle1.size + angle2.size
Пример #6
0
def test_ReverseAngle_on_null_empty_size_not_adding(sqlalchemy_information,
                                                    memory_session):
    angle = Angle(vector1=Vector(start_point='A', end_point='B'),
                  vector2=Vector(start_point='C', end_point='D'))

    memory_session.add(angle)
    memory_session.commit()

    tested_rule = ReverseAngle()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 1
Пример #7
0
def test_SumVectors_on_second_empty_adds_nothing(sqlalchemy_information,
                                                 memory_session):
    vector1 = Vector(start_point='A', end_point='B', length=2)
    vector2 = Vector(start_point=vector1.end_point, end_point='C')
    angle = Angle(vector1=vector1, vector2=vector2, size=180)

    memory_session.add_all([angle, vector1, vector2])
    memory_session.commit()

    tested_rule = SumVectors()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 1
    assert len(memory_session.query(Vector).all()) == 2
Пример #8
0
def test_ReverseAngle(sqlalchemy_information, memory_session):
    angle = Angle(vector1=Vector(start_point='A', end_point='B'),
                  vector2=Vector(start_point='C', end_point='D'),
                  size=30)

    memory_session.add(angle)
    memory_session.commit()

    tested_rule = ReverseAngle()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 2
    result = memory_session.query(Angle).filter_by(
        vector1=angle.vector2, vector2=angle.vector1).first()
    assert result.size == 360 - angle.size
Пример #9
0
def test_SumVectors(sqlalchemy_information, memory_session):
    vector1 = Vector(start_point='A', end_point='B', length=2)
    vector2 = Vector(start_point=vector1.end_point, end_point='C', length=3)
    angle = Angle(vector1=vector1, vector2=vector2, size=180)

    memory_session.add_all([angle, vector1, vector2])
    memory_session.commit()

    tested_rule = SumVectors()

    sqlalchemy_information.execute(tested_rule)

    assert len(memory_session.query(Angle).all()) == 1
    assert len(memory_session.query(Vector).all()) == 3
    result = memory_session.query(Vector).filter_by(
        start_point=vector1.start_point, end_point=vector2.end_point).first()
    assert result.length == vector1.length + vector2.length
Пример #10
0
 def execute(self, session):
     vector = Vector(start_point='A', end_point='B')
     session.add_all([vector, Angle(vector1=vector, size=-1)])
     session.commit()
Пример #11
0
 def execute(self, session):
     session.add(Angle(vector2=Vector(start_point='B', end_point='C')))
     session.commit()