File: arrays.php

package info (click to toggle)
php-ramsey-collection 2.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 612 kB
  • sloc: php: 3,239; xml: 31; makefile: 22
file content (84 lines) | stat: -rw-r--r-- 2,932 bytes parent folder | download
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

// phpcs:disable

declare(strict_types=1);

namespace Ramsey\Collection\Test\types;

use DateTimeImmutable;
use Ramsey\Collection\GenericArray;
use Ramsey\Collection\Test\Mock\IntegerArray;
use Ramsey\Collection\Test\Mock\MyArray;
use Ramsey\Collection\Test\Mock\StringArray;
use stdClass;

use function PHPStan\Testing\assertType;

$genericArray = new GenericArray(['foo', 123, true, null, new stdClass(), new DateTimeImmutable()]);

assertType('mixed', $genericArray[0]);
assertType('mixed', $genericArray[1]);
assertType('mixed', $genericArray[2]);
assertType('mixed', $genericArray[3]);
assertType('mixed', $genericArray[4]);
assertType('mixed', $genericArray[5]);
assertType('mixed', $genericArray->offsetGet(0));
assertType('array', $genericArray->toArray());
assertType('array', $genericArray->__serialize());
assertType('Traversable<(int|string), mixed>', $genericArray->getIterator());

/** @psalm-var mixed $value */
foreach ($genericArray as $value) {
    assertType('mixed', $value);
}

$stringArray = new StringArray(['foo', 'bar', 'baz']);

assertType('string', $stringArray[0]);
assertType('string', $stringArray[1]);
assertType('string', $stringArray[2]);
assertType('string', $stringArray->offsetGet(0));
assertType('array<string>', $stringArray->toArray());
assertType('array<string>', $stringArray->__serialize());
assertType('Traversable<(int|string), string>', $stringArray->getIterator());

foreach ($stringArray as $value) {
    assertType('string', $value);
}

$integerArray = new IntegerArray([42, 56, 78]);

assertType('int', $integerArray[0]);
assertType('int', $integerArray[1]);
assertType('int', $integerArray[2]);
assertType('int', $integerArray->offsetGet(0));
assertType('array<int>', $integerArray->toArray());
assertType('array<int>', $integerArray->__serialize());
assertType('Traversable<(int|string), int>', $integerArray->getIterator());

foreach ($integerArray as $value) {
    assertType('int', $value);
}

/** @var MyArray<array{id: int, name: string, date: DateTimeImmutable}> $myArray */
$myArray = new MyArray([
    [
        'id' => 1234,
        'name' => 'Samwise Gamgee',
        'date' => new DateTimeImmutable(),
    ],
]);

assertType('array{id: int, name: string, date: DateTimeImmutable}', $myArray[0]);
assertType('array{id: int, name: string, date: DateTimeImmutable}', $myArray->offsetGet(0));
assertType('int', $myArray[0]['id']);
assertType('string', $myArray[0]['name']);
assertType(DateTimeImmutable::class, $myArray[0]['date']);
assertType('array<array{id: int, name: string, date: DateTimeImmutable}>', $myArray->toArray());
assertType('array<array{id: int, name: string, date: DateTimeImmutable}>', $myArray->__serialize());
assertType('Traversable<(int|string), array{id: int, name: string, date: DateTimeImmutable}>', $myArray->getIterator());

foreach ($myArray as $value) {
    assertType('array{id: int, name: string, date: DateTimeImmutable}', $value);
}