|
1 | 1 | <?php
|
2 |
| -/* |
3 |
| - * Copyright 2023-present MongoDB, Inc. |
4 |
| - * |
5 |
| - * Licensed under the Apache License, Version 2.0 (the "License"); |
6 |
| - * you may not use this file except in compliance with the License. |
7 |
| - * You may obtain a copy of the License at |
8 |
| - * |
9 |
| - * https://www.apache.org/licenses/LICENSE-2.0 |
10 |
| - * |
11 |
| - * Unless required by applicable law or agreed to in writing, software |
12 |
| - * distributed under the License is distributed on an "AS IS" BASIS, |
13 |
| - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 |
| - * See the License for the specific language governing permissions and |
15 |
| - * limitations under the License. |
16 |
| - */ |
17 | 2 |
|
18 | 3 | namespace MongoDB\Benchmark\BSON;
|
19 | 4 |
|
20 | 5 | use MongoDB\Benchmark\BaseBench;
|
21 |
| -use MongoDB\BSON\Document; |
22 | 6 | use MongoDB\BSON\PackedArray;
|
23 | 7 | use PhpBench\Attributes\BeforeMethods;
|
24 | 8 |
|
25 | 9 | use function array_values;
|
26 | 10 | use function file_get_contents;
|
27 | 11 | use function iterator_to_array;
|
28 | 12 | use function json_decode;
|
29 |
| -use function MongoDB\BSON\fromPHP; |
30 | 13 |
|
31 | 14 | use const JSON_THROW_ON_ERROR;
|
32 | 15 |
|
33 | 16 | #[BeforeMethods('prepareData')]
|
34 | 17 | final class PackedArrayBench extends BaseBench
|
35 | 18 | {
|
36 |
| - private static string $rawBSONDocument; |
37 | 19 | private static PackedArray $array;
|
38 | 20 |
|
39 | 21 | public function prepareData(): void
|
40 | 22 | {
|
41 | 23 | $array = array_values(json_decode(file_get_contents(self::LARGE_FILE_PATH), true, 512, JSON_THROW_ON_ERROR));
|
42 | 24 |
|
43 |
| - // Store BSON string for a document since we can't create packed arrays from BSON strings |
44 |
| - self::$rawBSONDocument = fromPHP(['array' => $array]); |
45 |
| - } |
46 |
| - |
47 |
| - /** Create a document from the BSON string */ |
48 |
| - public static function getBSONArray(): PackedArray |
49 |
| - { |
50 |
| - return self::$array ??= Document::fromBSON(self::$rawBSONDocument)->get('array'); |
| 25 | + self::$array = PackedArray::fromPHP($array); |
51 | 26 | }
|
52 | 27 |
|
53 | 28 | public function benchCheckFirst(): void
|
54 | 29 | {
|
55 |
| - self::getBSONArray()->has(0); |
| 30 | + self::$array->has(0); |
56 | 31 | }
|
57 | 32 |
|
58 | 33 | public function benchCheckLast(): void
|
59 | 34 | {
|
60 |
| - self::getBSONArray()->has(94354); |
| 35 | + self::$array->has(94354); |
61 | 36 | }
|
62 | 37 |
|
63 | 38 | public function benchAccessFirst(): void
|
64 | 39 | {
|
65 |
| - self::getBSONArray()->get(0); |
| 40 | + self::$array->get(0); |
66 | 41 | }
|
67 | 42 |
|
68 | 43 | public function benchAccessLast(): void
|
69 | 44 | {
|
70 |
| - self::getBSONArray()->get(94354); |
| 45 | + self::$array->get(94354); |
71 | 46 | }
|
72 | 47 |
|
73 | 48 | public function benchIteratorToArray(): void
|
74 | 49 | {
|
75 |
| - iterator_to_array(self::getBSONArray()); |
| 50 | + iterator_to_array(self::$array); |
76 | 51 | }
|
77 | 52 |
|
78 | 53 | public function benchToPHPArray(): void
|
79 | 54 | {
|
80 |
| - self::getBSONArray()->toPHP(); |
| 55 | + self::$array->toPHP(); |
81 | 56 | }
|
82 | 57 |
|
83 | 58 | public function benchIteration(): void
|
84 | 59 | {
|
85 | 60 | // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedForeach
|
86 |
| - foreach (self::getBSONArray() as $key => $value); |
| 61 | + foreach (self::$array as $key => $value); |
87 | 62 | }
|
88 | 63 |
|
89 | 64 | public function benchIterationAfterIteratorToArray(): void
|
90 | 65 | {
|
91 | 66 | // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedForeach
|
92 |
| - foreach (iterator_to_array(self::getBSONArray()) as $key => $value); |
| 67 | + foreach (iterator_to_array(self::$array) as $key => $value); |
93 | 68 | }
|
94 | 69 |
|
95 | 70 | public function benchIterationAsArray(): void
|
96 | 71 | {
|
97 | 72 | // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedForeach
|
98 |
| - foreach (self::getBSONArray()->toPHP() as $key => $value); |
| 73 | + foreach (self::$array->toPHP() as $key => $value); |
99 | 74 | }
|
100 | 75 | }
|
0 commit comments