# принцып програирования TDD - Test Driven Development 
# переводится как "разработка основанная на тестировании" 
# данный прнцып предлогает, что с начало создаются тесты для нужной функции, которые будут проверять все возможные варианты ввода и вывода и только потом пишется сама функция. 
# При каждом обновлении кода функции необходимо запустить все коды функции все тесты и удостовериться что все они пройдены и нет никаких ошибок 

# ТЕСТЫ ВСЕГДА ДОЛЖНЫ ПИСАТЬСЯ ЯВНЫМ ОБРАЗОМ - все входные данные и ожидаекмые результаты работы функций долдны быть написанны от руки"- т.е. они не должны вычисляться самим тестом 


def максимальное_число(список):
    # список = [5, 9, 2, 3, 15]
    
    if type(список) !=list  and type(список) != tuple:
        raise TypeError (f"Эта функция может принять только список или кортеж.по факты был передан {type(список)}")
    
    наибольшее = список[0]
    for элемент in список:
        if элемент > наибольшее:
            наибольшее = элемент
    return наибольшее


def тест():
    название_теста = "список чисел"
    данные = [5, 9, 2, 3, 15]
    ожидаемый_ответ = 15 
    результат = максимальное_число(данные) 
    if результат == ожидаемый_ответ:
        print(f'тест"{название_теста}"пройден!') 
    else:
        print(f'тест"{название_теста}"не пройден!') 
        print(f"ожидался ответ - {ожидаемый_ответ}")
        print(f"получили результат - {результат}")


def тест():
    название_теста = "список чисел"
    данные = [5, 9, 2, 3, 15, -2, -30 , 21, 0, 1, -50]
    ожидаемый_ответ = 21
    результат = максимальное_число(данные) 
    if результат == ожидаемый_ответ:
        print(f'тест"{название_теста}"пройден!') 
    else:
        print(f'тест"{название_теста}"не пройден!') 
        print(f"ожидался ответ - {ожидаемый_ответ}")
        print(f"получили результат - {результат}") 


        
def тест():
    название_теста = "передан не список"
    данные = "Какой-то текст " 
    ожидаемый_ответ = "Ошибка"
    try:
        результат = максимальное_число(данные) 
    except:
        результат = "Ошибка"
    if результат == ожидаемый_ответ:
        print(f'тест"{название_теста}"пройден!') 
    else:
        print(f'тест"{название_теста}"не пройден!') 
        print(f"ожидался ответ - {ожидаемый_ответ}")
        print(f"получили результат - {результат}")
тест()

