From 2fe3262f2d6302782128c39d3ec85f49e36bbc1c Mon Sep 17 00:00:00 2001 From: Job Guldemeester Date: Fri, 26 Jan 2024 10:12:45 +0100 Subject: [PATCH] :sparkles: Added addBetween iterable extension --- lib/common/extensions/iterable.dart | 12 +++++++++++ test/common/extensions/iterable_test.dart | 26 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 lib/common/extensions/iterable.dart create mode 100644 test/common/extensions/iterable_test.dart diff --git a/lib/common/extensions/iterable.dart b/lib/common/extensions/iterable.dart new file mode 100644 index 0000000..ea81442 --- /dev/null +++ b/lib/common/extensions/iterable.dart @@ -0,0 +1,12 @@ +import 'package:collection/collection.dart'; + +/// Insert additional value into iterables. +extension Insert on Iterable { + /// Insert [value] between each element of the iterable. + Iterable addBetween(T value) { + return expandIndexed((int index, T element) sync* { + yield element; + if (index < length - 1) yield value; + }); + } +} diff --git a/test/common/extensions/iterable_test.dart b/test/common/extensions/iterable_test.dart new file mode 100644 index 0000000..25dc355 --- /dev/null +++ b/test/common/extensions/iterable_test.dart @@ -0,0 +1,26 @@ +import 'package:dcc_toolkit/common/extensions/iterable.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:parameterized_test/parameterized_test.dart'; + +void main() { + parameterizedTest2('addBetween tests', [ + [ + [], + [], + ], + [ + [1], + [1], + ], + [ + [1, 2], + [1, 0, 2], + ], + [ + [1, 2, 3], + [1, 0, 2, 0, 3], + ], + ], (List initial, List expected) { + expect(initial.addBetween(0), expected); + }); +}