Проблема в условии фильтра, который вы применяете в списке, чтобы найти нечетные числа.странное условие, что вы не работаете для отрицательного нечетного числа, потому что мод 2 возвращает -1 для этого вида числа.
number % 2 == 0 if number is even
number % 2 != 0 if number is odd
, поэтому, если вы измените условия фильтра, все будет работать как положено.
Еще одно предложение: почему вы хотите использовать функцию складывания для простой операции суммирования, когда вы можете напрямую использовать функции суммирования?
test("Test sum Of even minus odd") {
def sumOfEvenMinusOdd(l: List[Int]) : Int = {
val evensSum = l.filter(_%2 == 0).sum
val oddsSum = l.filter(_%2 != 0).sum
evensSum-oddsSum
}
assert(sumOfEvenMinusOdd(List.empty[Int]) == 0)
assert(sumOfEvenMinusOdd(List(1,3,5,4,5,2,1,0)) == -9) //answer: -9
assert(sumOfEvenMinusOdd(List(2,4,5,6,7,8,10)) == 18) //answer: 18
assert(sumOfEvenMinusOdd(List(109, 19, 12, 1, -5, -120, -15, 30,-33,-13, 12, 19, 3, 18, 1, -1)) == -133)
}
С этим решением ваша функция более понятна, и вы можете удалить оператор if наFunciton