diff --git a/packages/katana/lib/extension/date_time_iterable_extensions.dart b/packages/katana/lib/extension/date_time_iterable_extensions.dart index eed9df5e9..0240eca3f 100644 --- a/packages/katana/lib/extension/date_time_iterable_extensions.dart +++ b/packages/katana/lib/extension/date_time_iterable_extensions.dart @@ -40,4 +40,22 @@ extension DateTimeIterableExtensions on Iterable { } return res; } + + /// Calculates the most recent date in the [DateTime] list. + /// + /// [DateTime]のリストの中で一番新しい日付を算出します。 + DateTime max() { + return DateTime.fromMicrosecondsSinceEpoch( + map((e) => e.microsecondsSinceEpoch).reduce((a, b) => a > b ? a : b), + ); + } + + /// Calculates the oldest date in the [DateTime] list. + /// + /// [DateTime]のリストの中で一番古い日付を算出します。 + DateTime min() { + return DateTime.fromMicrosecondsSinceEpoch( + map((e) => e.microsecondsSinceEpoch).reduce((a, b) => a < b ? a : b), + ); + } } diff --git a/packages/katana/test/date_time_iterable_extensions_test.dart b/packages/katana/test/date_time_iterable_extensions_test.dart index 42025b293..5eafcf8cb 100644 --- a/packages/katana/test/date_time_iterable_extensions_test.dart +++ b/packages/katana/test/date_time_iterable_extensions_test.dart @@ -26,4 +26,24 @@ void main() { DateTime(2023, 3, 23, 10, 32, 10), ); }); + test("DateTimeIterableExtensions.min", () { + final minDateTime = DateTime(2022, 12, 23, 10, 32, 10); + final maxDateTime = DateTime(2023, 12, 23, 10, 32, 10); + final dateTimes = [ + ...List.generate(10, (i) => minDateTime.add(Duration(days: i * 10))), + maxDateTime, + ]; + expect(dateTimes.min().millisecondsSinceEpoch, + minDateTime.millisecondsSinceEpoch); + }); + test("DateTimeIterableExtensions.max", () { + final minDateTime = DateTime(2022, 12, 23, 10, 32, 10); + final maxDateTime = DateTime(2023, 12, 23, 10, 32, 10); + final dateTimes = [ + ...List.generate(10, (i) => minDateTime.add(Duration(days: i * 10))), + maxDateTime, + ]; + expect(dateTimes.max().millisecondsSinceEpoch, + maxDateTime.millisecondsSinceEpoch); + }); } diff --git a/packages/katana/test/double_iterable_extensions_test.dart b/packages/katana/test/double_iterable_extensions_test.dart index 02d5691e8..984966e25 100644 --- a/packages/katana/test/double_iterable_extensions_test.dart +++ b/packages/katana/test/double_iterable_extensions_test.dart @@ -15,6 +15,10 @@ void main() { expect(doubles.nearestOrNull(5000), 100.0); expect(doubles.nearestOrNull(double.nan), null); }); + test("DoubleIterableExtensions.sum", () { + final doubles = [1.0, 2.0, 3.0, 4.0]; + expect(doubles.sum(), 10.0); + }); test("DoubleIterableExtensions.average", () { final doubles = [1.0, 2.0, 3.0, 4.0]; expect(doubles.average(), 2.5); diff --git a/packages/katana/test/int_iterable_extensions_test.dart b/packages/katana/test/int_iterable_extensions_test.dart index 3c8ef9ddc..7c993c4ec 100644 --- a/packages/katana/test/int_iterable_extensions_test.dart +++ b/packages/katana/test/int_iterable_extensions_test.dart @@ -15,6 +15,10 @@ void main() { expect(ints.nearestOrNull(5000), 100); expect([].nearestOrNull(5000), null); }); + test("IntIterableExtensions.sum", () { + final ints = [1, 2, 3, 4]; + expect(ints.sum(), 10); + }); test("IntIterableExtensions.average", () { final ints = [1, 2, 3, 4]; expect(ints.average(), 2.5);