From 868cc03613bdce9938cff77e76404be242f09ed9 Mon Sep 17 00:00:00 2001 From: Pascal Welsch Date: Sat, 27 Mar 2021 22:14:30 +0100 Subject: [PATCH] Let sumBy accept num/int/double --- lib/src/collection/kt_iterable.dart | 13 +++++-------- test/collection/iterable_extensions_test.dart | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/src/collection/kt_iterable.dart b/lib/src/collection/kt_iterable.dart index 67c490b..b987c3b 100644 --- a/lib/src/collection/kt_iterable.dart +++ b/lib/src/collection/kt_iterable.dart @@ -1291,21 +1291,18 @@ extension KtIterableExtensions on KtIterable { } /// Returns the sum of all values produced by [selector] function applied to each element in the collection. - int sumBy(int Function(T) selector) { - int sum = 0; + R sumBy(R Function(T) selector) { + var sum = R == double ? 0.0 : 0; for (final element in iter) { sum += selector(element); } - return sum; + return sum as R; } /// Returns the sum of all values produced by [selector] function applied to each element in the collection. + @Deprecated("Use sumBy") double sumByDouble(double Function(T) selector) { - double sum = 0.0; - for (final element in iter) { - sum += selector(element); - } - return sum; + return sumBy(selector); } /// Returns a list containing first [n] elements. diff --git a/test/collection/iterable_extensions_test.dart b/test/collection/iterable_extensions_test.dart index 719b5dd..4e556e4 100644 --- a/test/collection/iterable_extensions_test.dart +++ b/test/collection/iterable_extensions_test.dart @@ -1614,13 +1614,26 @@ void testIterable(KtIterable Function() emptyIterable, }); group("sumBy", () { - test("double", () { + test("int", () { expect(iterableOf([1, 2, 3]).sumBy((i) => i * 2), 12); }); - test("factor 1.5", () { + test("double", () { + expect(iterableOf([1, 2, 3]).sumBy((i) => i * 1.5), 9.0); + + // ignore: deprecated_member_use_from_same_package expect(iterableOf([1, 2, 3]).sumByDouble((i) => i * 1.5), 9.0); }); + + test("double as num", () { + const num factor = 1.5; + expect(iterableOf([1, 2, 3]).sumBy((i) => i * factor), 9.0); + }); + + test("double as num", () { + const num factor = 2; + expect(iterableOf([1, 2, 3]).sumBy((i) => i * factor), 12); + }); }); group("take", () {