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

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

def максимальное_число_сортировка(список):
    список.sort()
    return список[-1]

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

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

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

# данные = ["слово", 5, 10, 15.5]