Проверьте обычные суммы, ноль, разные знаки и границы числового типа. Отдельно зафиксируйте, что функция делает, когда математическая сумма не помещается в результат.
Создание тестов для функции сложения без переполнения
Проверьте обычные суммы, ноль, разные знаки и границы числового типа. Отдельно зафиксируйте, что функция делает, когда математическая сумма не помещается в результат.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать набор тестов для абстрактной функции, которая должна корректно вычислять сумму двух чисел, гарантируя отсутствие переполнения. Тесты должны покрывать граничные случаи, типичные значения и потенциально проблемные комбинации входных данных.
Ответ
Проверьте обычные суммы, ноль, разные знаки и границы числового типа. Отдельно зафиксируйте, что функция делает, когда математическая сумма не помещается в результат.
Для контракта «Int + Int возвращает Int, при переполнении — ошибка» минимальный набор:
2 + 3 = 5,-2 + -3 = -5,-7 + 10 = 3.0 + 0 = 0,x + 0 = x,x + (-x) = 0для допустимого -x.MAX + 0 = MAX,MIN + 0 = MIN,MAX + MIN = -1.MAX + 1иMIN + (-1)должны сигнализировать переполнение, а не возвращать число противоположного знака.
Проверьте оба порядка аргументов. В property-based проверке рассчитывайте эталон в более широком типе или BigInteger. Если функция по контракту возвращает Long/BigInteger, вместо ожидания ошибки нужно проверять точную расширенную сумму. Типы и политику переполнения нельзя молча придумывать за автора API.