Ejemplo n.º 1
0
    def test_1(self, line):
        """
        Не корректное добавление строк.
        :param line: Строка.
        """

        sheet = Sheet('1\t1')
        with pytest.raises(ValueError):
            sheet.add_line(line)
Ejemplo n.º 2
0
    def test_5(self):
        """
        Вычисление с не корректной ссылкой.
        """

        sheet = Sheet('1\t1')
        sheet.add_line('=B1')

        result = sheet.calculate()
        assert result[(1, 1)] == str(CalcExpError.not_valid_ref())
Ejemplo n.º 3
0
    def test_1(self):
        """
        Преждевременный вызов.
        """

        sheet = Sheet('2\t1')

        with pytest.raises(RuntimeError):
            sheet.calculate()

        sheet.add_line('')
        with pytest.raises(RuntimeError):
            sheet.calculate()
Ejemplo n.º 4
0
    def test_3(self):
        """
        Максимальная циклическая вложенность\зависимость. =A2, =A3, ..., =Z8, =A1
        """

        sheet = Sheet(f'{SheetSize.MAX_Y}\t{SheetSize.MAX_X}')
        for y in range(1, sheet.get_size().y + 1):
            line = [
                f'={chr(ord("A") + x)}{y}'
                for x in range(1,
                               sheet.get_size().x)
            ]

            # Добавить цикличность
            line.append('=A1' if y == SheetSize.MAX_Y else f'=A{y + 1}')

            sheet.add_line('\t'.join(line))

        result = sheet.calculate()
        for y in range(0, sheet.get_size().y):
            for x in range(0, sheet.get_size().x):
                assert result[(x + 1, y + 1)] == \
                       str(CalcExpError.circle_ref()) if y == sheet.get_size().y else str(CalcExpError.calc_exp())
Ejemplo n.º 5
0
def run():
    """
    Запустить приложение
    """

    size_line = input()
    sheet = Sheet(size_line)

    for y in range(0, sheet.get_size().y):
        sheet.add_line(input())

    result = sheet.calculate()

    for y in range(0, sheet.get_size().y):
        print('\t'.join([
            str(result[(x + 1, y + 1)]) for x in range(0,
                                                       sheet.get_size().x)
        ]))
Ejemplo n.º 6
0
    def test_6(self):
        """
        Общее успешное вычисление. С ошибками, с зацикливанием, со всеми видами типов.
        """

        sheet = Sheet('3\t3')
        sheet.add_line("=A1\t=3-1*2+1\t'Sample")
        sheet.add_line("=C1\t=A2-7/2\t=B1-8/2")
        sheet.add_line("'\t=A3\t=B4")

        result = sheet.calculate()

        assert result[(1, 1)] == str(CalcExpError.circle_ref())
        assert result[(2, 1)] == 5
        assert result[(3, 1)] == 'Sample'

        assert result[(1, 2)] == 'Sample'
        assert result[(2, 2)] == str(CalcExpError.calc_exp())
        assert result[(3, 2)] == -1

        assert result[(1, 3)] == ''
        assert result[(2, 3)] == ''
        assert result[(3, 3)] == str(CalcExpError.not_valid_ref())
Ejemplo n.º 7
0
    def test_3(self):
        """
        Корректное добавление строк.
        """

        sheet = Sheet('2\t1')

        sheet.add_line('')
        assert len(sheet._cell_list) == 1
        assert isinstance(sheet._cell_list[(1, 1)], CellValue)

        sheet.add_line('')
        assert len(sheet._cell_list) == 2
        assert isinstance(sheet._cell_list[(1, 2)], CellValue)
Ejemplo n.º 8
0
    def test_2(self, size_y):
        """
        Циклическое вычисление.
        :param int size_y: Размерность по вертикали. Вложенность расчета выражения.
        """

        sheet = Sheet(f'{size_y}\t{2}')
        for y in range(1, size_y):
            sheet.add_line(f'=A{y + 1}\t1')

        # Добавили цикличность
        sheet.add_line(f'=A1\t1')

        result = sheet.calculate()
        for y in range(0, size_y):
            assert result[(1, y + 1)] == str(
                CalcExpError.circle_ref()) if y == size_y else str(
                    CalcExpError.calc_exp())
            assert result[(2, y + 1)] == 1
Ejemplo n.º 9
0
    def test_4(self):
        """
        Максимальное циклическое вычисление. =A2 + 1, =A3 + 1, ..., =Z8 + 1, =1
        """

        sheet = Sheet(f'{SheetSize.MAX_Y}\t{SheetSize.MAX_X}')
        for y in range(1, sheet.get_size().y + 1):
            line = [
                f'={chr(ord("A") + x)}{y}+1'
                for x in range(1,
                               sheet.get_size().x)
            ]

            # Замыкаем вычисление
            line.append('=1' if y == sheet.get_size().y else f'=A{y + 1}+1')

            sheet.add_line('\t'.join(line))

        result = sheet.calculate()
        for y in range(1, sheet.get_size().y + 1):
            for x in range(1, sheet.get_size().x + 1):
                assert result[(x, y)] == \
                       (sheet.get_size().y * sheet.get_size().x - sheet.get_size().x * (y - 1) - x + 1)
Ejemplo n.º 10
0
    def test_1(self):
        """
        Создание экземпляра класса.
        """

        assert isinstance(Sheet('1\t1').get_size(), SheetSize)