-
Notifications
You must be signed in to change notification settings - Fork 428
/
array-unshift.php
68 lines (53 loc) · 1.67 KB
/
array-unshift.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
namespace ArrayUnshift;
use stdClass;
use function array_unshift;
use function PHPStan\Testing\assertType;
/**
* @param string[] $a
* @param int[] $b
* @param non-empty-array<int> $c
* @param array<int|string> $d
*/
function arrayUnshift(array $a, array $b, array $c, array $d, array $arr): void
{
array_unshift($a, ...$b);
assertType('array<int|string>', $a);
/** @var non-empty-array<string> $arr */
array_push($arr, ...$b);
assertType('non-empty-array<int|string>', $arr);
array_unshift($b, ...[]);
assertType('array<int>', $b);
array_unshift($c, ...[19, 'baz', false]);
assertType('non-empty-array<\'baz\'|int|false>', $c);
/** @var array<bool|null> $d1 */
$d1 = [];
array_unshift($d, ...$d1);
assertType('array<bool|int|string|null>', $d);
}
function arrayUnshiftConstantArray(): void
{
$a = ['foo' => 17, 'a', 'bar' => 18,];
array_unshift($a, ...[19, 'baz', false]);
assertType('array{0: 19, 1: \'baz\', 2: false, foo: 17, 3: \'a\', bar: 18}', $a);
$b = ['foo' => 17, 'a', 'bar' => 18];
array_unshift($b, 19, 'baz', false);
assertType('array{0: 19, 1: \'baz\', 2: false, foo: 17, 3: \'a\', bar: 18}', $b);
$c = ['foo' => 17, 'a', 'bar' => 18];
array_unshift($c, ...[]);
assertType('array{foo: 17, 0: \'a\', bar: 18}', $c);
$d = [];
array_unshift($d, ...[]);
assertType('array{}', $d);
$e = [];
array_unshift($e, 19, 'baz', false);
assertType('array{19, \'baz\', false}', $e);
$f = [17];
/** @var array<bool|null> $f1 */
$f1 = [];
array_unshift($f, ...$f1);
assertType('non-empty-array<int, 17|bool|null>', $f);
$g = [new stdClass()];
array_unshift($g, ...[new stdClass(), new stdClass()]);
assertType('array{stdClass, stdClass, stdClass}', $g);
}