Skip to content

Commit

Permalink
fix: Add min and max to DateTime.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathrunet committed Nov 17, 2023
1 parent 8eeffd0 commit bc76dcd
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
18 changes: 18 additions & 0 deletions packages/katana/lib/extension/date_time_iterable_extensions.dart
Expand Up @@ -40,4 +40,22 @@ extension DateTimeIterableExtensions on Iterable<DateTime> {
}
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),
);
}
}
20 changes: 20 additions & 0 deletions packages/katana/test/date_time_iterable_extensions_test.dart
Expand Up @@ -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);
});
}
4 changes: 4 additions & 0 deletions packages/katana/test/double_iterable_extensions_test.dart
Expand Up @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions packages/katana/test/int_iterable_extensions_test.dart
Expand Up @@ -15,6 +15,10 @@ void main() {
expect(ints.nearestOrNull(5000), 100);
expect(<int>[].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);
Expand Down

0 comments on commit bc76dcd

Please sign in to comment.