예제 #1
0
def test_str():
    """Проверяем печатать отрезка"""
    # Создадим два отрезка [-120, 50] и [10, 230]
    s1 = Segment1(-120, 50)     # создали объект класса Segment1, на него ссылается переменная s1 - первый отрезок
    s2 = Segment1(100, 230)     # создали объект класса Segment1, на него ссылается переменная s2 - второй отрезок
    
    print(s1)   # [-120, 50]:170
    print(s2)   # [100, 230]:130

    # str(s1) возвращает строку. Эту строку сравниваем с образцом.
    assert str(s1) == '[-120, 50]:170'
    assert str(s2) == '[100, 230]:130'
예제 #2
0
def test_connect_to():
    """s2 присоединяем в конце s1"""
    s1 = Segment1(-120,50)
    s2 = Segment1(200, 230)
    print(s1)
    print(s2)
    assert str(s1) == '[-120, 50]:170'
    assert str(s2) == '[200, 230]:30'

    s2.connect_to(s1)
    print(s1)           # не изменится
    print(s2)           # начало s2 совпадает с концом s1
    
    assert str(s1) == '[-120, 50]:170'
    assert str(s2) == '[50, 80]:30'
예제 #3
0
def test_read():
    """Из строки получаем отрезок"""

    # минус и плюс
    s1 = Segment1.parse('-120 50')
    print(s1)
    assert str(s1) == '[-120, 50]:170'

    # минус и минус
    s1 = Segment1.parse('-120 -50')
    print(s1)
    assert str(s1) == '[-120, -50]:70'

    # плюс и плюс
    s1 = Segment1.parse('120 150')
    print(s1)
    assert str(s1) == '[120, 150]:30'
예제 #4
0
def test_copymove():    
    """Проверяем получение нового отрезка со сдвигом на dx"""
    s1 = Segment1(-120, 50)
    s2 = s1.copymove(40)
    print(s1)               # s1 не должно измениться
    print(s2)               # s2 - новый отрезок на другом месте

    assert str(s1) == '[-120, 50]:170'
    assert str(s2) == '[-80, 90]:170'
예제 #5
0
def test_length():
    """Тест проверяет функцию length"""
    
    # Создадим отрезок
    s1 = Segment1(-100, 20)

    # добавим проверку метода length()
    len1 = s1.length()
    # печать должна показывать всю информацию, если длина считается неправильно
    print(s1.start, s1.finish, len1)  # -100 20 120
    assert len1 == 120
예제 #6
0
def test_create():
    """Тест проверяет создание отрезков и их атрибуты"""
    
    # Создадим два отрезка [-150, 50] и [10, 230]
    s1 = Segment1(-150, 50)     # создали объект класса Segment1, на него ссылается переменная s1 - первый отрезок
    s2 = Segment1(100, 230)     # создали объект класса Segment1, на него ссылается переменная s2 - второй отрезок

    print(s1.start, s1.finish)  # -150 50
    assert s1.start == -150
    assert s1.finish == 50
    print(s2.start, s2.finish)  # 100 230
    assert s2.start == 100
    assert s2.finish == 230

    s1.start = -120             # первый отрезок теперь [-120, -30]
    s1.finish = -30

    print(s1.start, s1.finish)  # -120 -30
    assert s1.start == -120
    assert s1.finish == -30
예제 #7
0
def test_move():
    """Проверяем сдвиг отрезка на dx"""
    s1 = Segment1(-120, 50)
    assert str(s1) == '[-120, 50]:170'

    s1.move(40)                     # сдвиг на 40 вправо
    print(s1)
    assert str(s1) == '[-80, 90]:170'
    
    s1.move(-100)                   # сдвиг на 100 влево
    print(s1)
    assert str(s1) == '[-180, -10]:170'
예제 #8
0
def test_normalize():
    """Концы отрезка в правильном порядке"""
    
    # правильный порядок не изменяется
    s1 = Segment1(-120, 50)
    print(s1)
    assert str(s1) == '[-120, 50]:170'

    # неправильный порядок становится правильным
    s2 = Segment1(50, -120)
    print(s2)
    assert str(s2) == '[-120, 50]:170'

    # normalize не меняет правильный порядок
    s1.normalize()
    print(s1)
    assert str(s1) == '[-120, 50]:170'

    # normalize устанавливает правильный порядок
    s2.start = 200
    s2.finish = 50
    s2.normalize()
    print(s2)
    assert str(s2) == '[50, 200]:150'
예제 #9
0
def read_input_data():
    """Читаем входные данные из файла data.txt.
    Возвращаем длину требуемой веревки и список отрезков
    """

    a = []                      # список отрезков сначала пустой
    with open('data.txt', 'r') as fin:
        n = fin.readline()      # первая строка - требуемая длина вервеки
        n = int(n)              # требуемая длина вервеки целое число
        for textline in fin:
            # пустая строка? пропустим.
            # Может быть пустая строка в конце data.txt
            if textline.strip() == '':
                continue
            s = Segment1.parse(textline)
            a.append(s)
            
    return n, a