def test_1(self, line): """ Не корректное добавление строк. :param line: Строка. """ sheet = Sheet('1\t1') with pytest.raises(ValueError): sheet.add_line(line)
def test_5(self): """ Вычисление с не корректной ссылкой. """ sheet = Sheet('1\t1') sheet.add_line('=B1') result = sheet.calculate() assert result[(1, 1)] == str(CalcExpError.not_valid_ref())
def test_1(self): """ Преждевременный вызов. """ sheet = Sheet('2\t1') with pytest.raises(RuntimeError): sheet.calculate() sheet.add_line('') with pytest.raises(RuntimeError): sheet.calculate()
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())
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) ]))
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())
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)
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
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)
def test_1(self): """ Создание экземпляра класса. """ assert isinstance(Sheet('1\t1').get_size(), SheetSize)