Skip to content

Commit 45d2d46

Browse files
authored
Merge pull request #264 from boesing/feature/orderedlist-combine
Introduce `OrderedListInterface#combine`
2 parents d36e7b6 + 78e4fe9 commit 45d2d46

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

src/OrderedList.php

+10
Original file line numberDiff line numberDiff line change
@@ -491,4 +491,14 @@ public function shuffle(): OrderedListInterface
491491

492492
return $instance;
493493
}
494+
495+
public function combine(OrderedListInterface $other, OrderedListInterface ...$others): OrderedListInterface
496+
{
497+
$instance = clone $this;
498+
foreach ([$other, ...$others] as $other) {
499+
$instance->data = [...$instance->data, ...$other->toNativeArray()];
500+
}
501+
502+
return $instance;
503+
}
494504
}

src/OrderedListInterface.php

+9
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,13 @@ public function removeAt(int $index): self;
271271
* @return OrderedListInterface<TValue>
272272
*/
273273
public function shuffle(): self;
274+
275+
/**
276+
* Combines multiple lists into one.
277+
*
278+
* @param OrderedListInterface<TValue> $other
279+
* @param OrderedListInterface<TValue> ...$others
280+
* @return OrderedListInterface<TValue>
281+
*/
282+
public function combine(OrderedListInterface $other, OrderedListInterface ...$others): self;
274283
}

tests/GenericOrderedListTest.php

+45
Original file line numberDiff line numberDiff line change
@@ -1487,4 +1487,49 @@ public function testWillShuffleValuesInList(): void
14871487
self::assertNotSame($list, $list2);
14881488
self::assertNotSame([1, 2, 3], $list2->toNativeArray());
14891489
}
1490+
1491+
public function testWillCombineWithAnohterList(): void
1492+
{
1493+
/**
1494+
* @var OrderedListInterface<non-empty-string> $list
1495+
*/
1496+
$list = new GenericOrderedList([
1497+
'foo',
1498+
'bar',
1499+
'baz',
1500+
]);
1501+
1502+
$list2 = new GenericOrderedList([
1503+
'qoo',
1504+
'ooq',
1505+
]);
1506+
1507+
$list3 = $list->combine($list2);
1508+
1509+
self::assertNotSame($list, $list3);
1510+
self::assertSame(['foo', 'bar', 'baz', 'qoo', 'ooq'], $list3->toNativeArray());
1511+
}
1512+
1513+
public function testWillCombineWithMultipleLists(): void
1514+
{
1515+
/**
1516+
* @var OrderedListInterface<non-empty-string> $list
1517+
*/
1518+
$list = new GenericOrderedList(['foo']);
1519+
1520+
$list2 = new GenericOrderedList(['bar']);
1521+
1522+
$list3 = new GenericOrderedList([
1523+
'baz',
1524+
'qoo',
1525+
'ooq',
1526+
]);
1527+
1528+
$list4 = $list->combine($list2, $list3);
1529+
1530+
self::assertNotSame($list, $list2);
1531+
self::assertNotSame($list, $list3);
1532+
self::assertNotSame($list, $list4);
1533+
self::assertSame(['foo', 'bar', 'baz', 'qoo', 'ooq'], $list4->toNativeArray());
1534+
}
14901535
}

0 commit comments

Comments
 (0)