Skip to content

Commit d4eb3bd

Browse files
authored
Merge pull request #156 from leisim/takefirstlast
Make sure takeFirst and takeLast doesn't crash when n > length
2 parents 1c43c45 + 4320730 commit d4eb3bd

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

lib/src/iterable.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ extension IterableTakeFirst<E> on Iterable<E> {
520520
/// ```
521521
List<E> takeFirst(int n) {
522522
final list = this is List<E> ? this as List<E> : toList();
523-
return list.sublist(0, n);
523+
return list.take(n).toList();
524524
}
525525
}
526526

@@ -536,7 +536,7 @@ extension IterableTakeLast<E> on Iterable<E> {
536536
/// ```
537537
List<E> takeLast(int n) {
538538
final list = this is List<E> ? this as List<E> : toList();
539-
return list.sublist(length - n);
539+
return list.reversed.take(n).reversed.toList();
540540
}
541541
}
542542

test/iterable_test.dart

+2
Original file line numberDiff line numberDiff line change
@@ -348,12 +348,14 @@ void main() {
348348
expect([].takeFirst(0), []);
349349
expect([1, 2, 3].takeFirst(0), []);
350350
expect([1, 2, 3].takeFirst(2), [1, 2]);
351+
expect([1, 2, 3].takeFirst(4), [1, 2, 3]);
351352
});
352353

353354
test('.takeLast()', () {
354355
expect([].takeLast(0), []);
355356
expect([1, 2, 3].takeLast(0), []);
356357
expect([1, 2, 3].takeLast(2), [2, 3]);
358+
expect([1, 2, 3].takeLast(4), [1, 2, 3]);
357359
});
358360

359361
test('.firstWhile()', () {

0 commit comments

Comments
 (0)