From d4c96da5b41d7db78123ce7b6c182576abca9606 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Sat, 14 May 2022 11:46:51 +0200 Subject: [PATCH 1/9] Implement performance testing in the CI pipeline using phpbench --- .github/workflows/main.yml | 31 ++ composer.json | 2 + composer.lock | 447 +++++++++++------- phpbench.json | 5 + .../Performance/Cell/CoordinateBenchmark.php | 91 ++++ .../Worksheet/PopulateWorksheetBenchmark.php | 115 +++++ .../Writer/AbstractBasicWriter.php | 44 ++ .../Writer/Html/HtmlWriterBenchmark.php | 26 + .../Writer/Ods/OdsWriterBenchmark.php | 26 + .../Writer/Xls/XlsWriterLargeBenchmark.php | 32 ++ .../Writer/Xls/XlxWriterBenchmark.php | 26 + .../Writer/Xlsx/XlsxWriterBenchmark.php | 26 + .../Writer/Xlsx/XlsxWriterLargeBenchmark.php | 32 ++ 13 files changed, 743 insertions(+), 160 deletions(-) create mode 100644 phpbench.json create mode 100644 tests/Performance/Cell/CoordinateBenchmark.php create mode 100644 tests/Performance/Worksheet/PopulateWorksheetBenchmark.php create mode 100644 tests/Performance/Writer/AbstractBasicWriter.php create mode 100644 tests/Performance/Writer/Html/HtmlWriterBenchmark.php create mode 100644 tests/Performance/Writer/Ods/OdsWriterBenchmark.php create mode 100644 tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php create mode 100644 tests/Performance/Writer/Xls/XlxWriterBenchmark.php create mode 100644 tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php create mode 100644 tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b36bf6c8fa..2c18a2291e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -182,6 +182,37 @@ jobs: - name: Static analysis with PHPStan run: ./vendor/bin/phpstan analyse + performance: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib + coverage: none + tools: cs2pr + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Performance tests with PHPBench + run: ./vendor/bin/phpbench run tests/performance --report=aggregate + coverage: runs-on: ubuntu-latest steps: diff --git a/composer.json b/composer.json index 4cf5e77db1..a0a00b2f62 100644 --- a/composer.json +++ b/composer.json @@ -83,6 +83,7 @@ "friendsofphp/php-cs-fixer": "^3.2", "jpgraph/jpgraph": "^4.0", "mpdf/mpdf": "8.1.1", + "phpbench/phpbench": "^1.2", "phpcompatibility/php-compatibility": "^9.3", "phpstan/phpstan": "^1.1", "phpstan/phpstan-phpunit": "^1.0", @@ -104,6 +105,7 @@ "autoload-dev": { "psr-4": { "PhpOffice\\PhpSpreadsheetTests\\": "tests/PhpSpreadsheetTests", + "PhpOffice\\PhpSpreadsheetPerformance\\": "tests/Performance", "PhpOffice\\PhpSpreadsheetInfra\\": "infra" } } diff --git a/composer.lock b/composer.lock index 7ad1d7ebdb..a9c9f47942 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2e09b120ad90fc0fbbc055e1f341910e", + "content-hash": "92688fa4184088c8dab345efcf149221", "packages": [ { "name": "ezyang/htmlpurifier", @@ -279,10 +279,6 @@ "keywords": [ "enum" ], - "support": { - "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.3" - }, "funding": [ { "url": "https://github.com/mnapoli", @@ -830,7 +826,6 @@ "php-parallel-lint/php-parallel-lint": "^1.3.1", "phpcompatibility/php-compatibility": "^9.0" }, - "default-branch": true, "type": "composer-plugin", "extra": { "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" @@ -999,10 +994,6 @@ "constructor", "instantiate" ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -1162,10 +1153,6 @@ ], "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", "homepage": "https://github.com/dompdf/dompdf", - "support": { - "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v1.2.2" - }, "time": "2022-04-27T13:50:54+00:00" }, { @@ -1366,11 +1353,6 @@ "php", "utf-8" ], - "support": { - "docs": "http://mpdf.github.io", - "issues": "https://github.com/mpdf/mpdf/issues", - "source": "https://github.com/mpdf/mpdf" - }, "funding": [ { "url": "https://www.paypal.me/mpdf", @@ -1426,10 +1408,6 @@ "object", "object graph" ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" - }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", @@ -1488,10 +1466,6 @@ "parser", "php" ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" - }, "time": "2021-11-30T19:35:32+00:00" }, { @@ -1649,10 +1623,6 @@ } ], "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, "time": "2022-02-21T01:04:05+00:00" }, { @@ -1693,10 +1663,6 @@ ], "description": "A library to read, parse, export and make subsets of different types of font files.", "homepage": "https://github.com/PhenX/php-font-lib", - "support": { - "issues": "https://github.com/dompdf/php-font-lib/issues", - "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" - }, "time": "2021-12-17T19:44:54+00:00" }, { @@ -1739,10 +1705,6 @@ ], "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", - "support": { - "issues": "https://github.com/dompdf/php-svg-lib/issues", - "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.1" - }, "time": "2022-03-07T12:52:04+00:00" }, { @@ -1845,12 +1807,186 @@ "stream", "uri" ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" - }, "time": "2015-12-19T14:08:53+00:00" }, + { + "name": "phpbench/container", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpbench/container.git", + "reference": "6d555ff7174fca13f9b1ec0b4a089ed41d0ab392" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/container/zipball/6d555ff7174fca13f9b1ec0b4a089ed41d0ab392", + "reference": "6d555ff7174fca13f9b1ec0b4a089ed41d0ab392", + "shasum": "" + }, + "require": { + "psr/container": "^1.0|^2.0", + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.52", + "phpunit/phpunit": "^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpBench\\DependencyInjection\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "Simple, configurable, service container.", + "time": "2022-01-25T10:17:35+00:00" + }, + { + "name": "phpbench/dom", + "version": "0.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpbench/dom.git", + "reference": "b013b717832ddbaadf2a40984b04bc66af9a7110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/dom/zipball/b013b717832ddbaadf2a40984b04bc66af9a7110", + "reference": "b013b717832ddbaadf2a40984b04bc66af9a7110", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^7.2||^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.18", + "phpstan/phpstan": "^0.12.83", + "phpunit/phpunit": "^8.0||^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpBench\\Dom\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "DOM wrapper to simplify working with the PHP DOM implementation", + "time": "2021-09-24T15:26:07+00:00" + }, + { + "name": "phpbench/phpbench", + "version": "1.2.5", + "source": { + "type": "git", + "url": "https://github.com/phpbench/phpbench.git", + "reference": "a38af132cf317fd13c199cf73501153b82c279b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/a38af132cf317fd13c199cf73501153b82c279b5", + "reference": "a38af132cf317fd13c199cf73501153b82c279b5", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.13", + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "php": "^7.3 || ^8.0", + "phpbench/container": "^2.1", + "phpbench/dom": "~0.3.1", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "seld/jsonlint": "^1.1", + "symfony/console": "^4.2 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.2 || ^5.0 || ^6.0", + "symfony/finder": "^4.2 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0", + "symfony/process": "^4.2 || ^5.0 || ^6.0", + "webmozart/path-util": "^2.3" + }, + "require-dev": { + "dantleech/invoke": "^2.0", + "friendsofphp/php-cs-fixer": "^3.0", + "jangregor/phpstan-prophecy": "^0.8.1", + "phpspec/prophecy": "^1.12", + "phpstan/phpstan": "^0.12.7", + "phpunit/phpunit": "^8.5.8 || ^9.0", + "symfony/error-handler": "^5.2 || ^6.0", + "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0" + }, + "suggest": { + "ext-xdebug": "For Xdebug profiling extension." + }, + "bin": [ + "bin/phpbench" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "files": [ + "lib/Report/Func/functions.php" + ], + "psr-4": { + "PhpBench\\": "lib/", + "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "PHP Benchmarking Framework", + "funding": [ + { + "url": "https://github.com/dantleech", + "type": "github" + } + ], + "time": "2022-03-06T17:10:14+00:00" + }, { "name": "phpcompatibility/php-compatibility", "version": "9.3.5", @@ -2067,10 +2203,6 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, "time": "2022-03-15T21:29:03+00:00" }, { @@ -2134,10 +2266,6 @@ "spy", "stub" ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, "time": "2021-12-08T12:19:24+00:00" }, { @@ -2245,10 +2373,6 @@ "MIT" ], "description": "PHPUnit extensions and rules for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.1.1" - }, "time": "2022-04-20T15:24:25+00:00" }, { @@ -2316,10 +2440,6 @@ "testing", "xunit" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2376,10 +2496,6 @@ "filesystem", "iterator" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2439,10 +2555,6 @@ "keywords": [ "process" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2498,10 +2610,6 @@ "keywords": [ "template" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2557,10 +2665,6 @@ "keywords": [ "timer" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -2656,10 +2760,6 @@ "testing", "xunit" ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" - }, "funding": [ { "url": "https://phpunit.de/sponsors.html", @@ -2916,10 +3016,6 @@ "parser", "stylesheet" ], - "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" - }, "time": "2021-12-11T13:40:54+00:00" }, { @@ -2966,10 +3062,6 @@ ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3022,10 +3114,6 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3077,10 +3165,6 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3151,10 +3235,6 @@ "compare", "equality" ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3208,10 +3288,6 @@ ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3274,10 +3350,6 @@ "unidiff", "unified diff" ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3337,10 +3409,6 @@ "environment", "hhvm" ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3414,10 +3482,6 @@ "export", "exporter" ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3478,10 +3542,6 @@ "keywords": [ "global state" ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3535,10 +3595,6 @@ ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3592,10 +3648,6 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3647,10 +3699,6 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3710,10 +3758,6 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3765,10 +3809,6 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3821,10 +3861,6 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3874,10 +3910,6 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3886,6 +3918,66 @@ ], "time": "2020-09-28T06:39:44+00:00" }, + { + "name": "seld/jsonlint", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "4211420d25eba80712bff236a98960ef68b866b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2022-04-01T13:37:23+00:00" + }, { "name": "setasign/fpdi", "version": "v2.3.6", @@ -4007,11 +4099,6 @@ "phpcs", "standards" ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, "time": "2021-12-12T21:44:58+00:00" }, { @@ -4603,9 +4690,6 @@ "polyfill", "portable" ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5381,10 +5465,6 @@ "pdf417", "qrcode" ], - "support": { - "issues": "https://github.com/tecnickcom/TCPDF/issues", - "source": "https://github.com/tecnickcom/TCPDF/tree/6.4.4" - }, "funding": [ { "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tcpdf%20project", @@ -5500,6 +5580,53 @@ "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, "time": "2021-03-09T10:59:23+00:00" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -5526,5 +5653,5 @@ "ext-zlib": "*" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "1.1.0" } diff --git a/phpbench.json b/phpbench.json new file mode 100644 index 0000000000..b1322b6e5f --- /dev/null +++ b/phpbench.json @@ -0,0 +1,5 @@ +{ + "$schema":"./vendor/phpbench/phpbench/phpbench.schema.json", + "runner.bootstrap": "vendor/autoload.php", + "runner.file_pattern": "*Benchmark.php" +} diff --git a/tests/Performance/Cell/CoordinateBenchmark.php b/tests/Performance/Cell/CoordinateBenchmark.php new file mode 100644 index 0000000000..5786201b80 --- /dev/null +++ b/tests/Performance/Cell/CoordinateBenchmark.php @@ -0,0 +1,91 @@ +columns = 16384; // Xlsx Max Column Index + $this->rows = 16; + $this->columnMaxAddress = Coordinate::stringFromColumnIndex($this->columns); + ++$this->columnMaxAddress; + } + + /** + * @Warmup(2) + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkColumnIndexFromString(): void + { + for ($column = 'A'; $column !== $this->columnMaxAddress; ++$column) { + $index = Coordinate::columnIndexFromString($column); + } + } + + /** + * @Warmup(2) + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkStringFromColumnIndex(): void + { + for ($column = 1; $column <= $this->columns; ++$column) { + $index = Coordinate::stringFromColumnIndex($column); + } + } + + /** + * @Warmup(2) + * @revs(5) + * @Iterations(10) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkCoordinateFromString(): void + { + for ($column = 'A'; $column !== $this->columnMaxAddress; ++$column) { + for ($row = 1; $row <= $this->rows; ++$row) { + $coordinateArray = Coordinate::coordinateFromString("{$column}{$row}"); + } + } + } + + /** + * @Warmup(2) + * @revs(5) + * @Iterations(10) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkIndexesFromString(): void + { + for ($column = 'A'; $column !== $this->columnMaxAddress; ++$column) { + for ($row = 1; $row <= $this->rows; ++$row) { + $coordinateArray = Coordinate::indexesFromString("{$column}{$row}"); + } + } + } +} diff --git a/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php b/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php new file mode 100644 index 0000000000..7b7be71a68 --- /dev/null +++ b/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php @@ -0,0 +1,115 @@ +columns = 64; + $this->rows = 1024; + $this->columnMaxAddress = Coordinate::stringFromColumnIndex($this->columns); + ++$this->columnMaxAddress; + + $this->spreadsheet = new Spreadsheet(); + $this->worksheet = $this->spreadsheet->getActiveSheet(); + + $this->sampleDataInteger = range(1, $this->columns); + $this->sampleDataString = array_fill(0, $this->columns, 'Hello World'); + } + + /** + * @revs(5) + * @Iterations(5) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkPopulateIntegerValuesByCell(): void + { + for ($row = 1; $row <= $this->rows; ++$row) { + for ($column = 'A'; $column !== $this->columnMaxAddress; ++$column) { + $this->worksheet->setCellValue("{$column}{$row}", 1); + } + } + } + + /** + * @revs(5) + * @Iterations(5) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkPopulateStringValuesByCell(): void + { + for ($row = 1; $row <= $this->rows; ++$row) { + for ($column = 'A'; $column !== $this->columnMaxAddress; ++$column) { + $this->worksheet->setCellValue("{$column}{$row}", 'Hello World'); + } + } + } + + /** + * @revs(5) + * @Iterations(5) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkPopulateIntegerValuesFromArray(): void + { + for ($row = 1; $row <= $this->rows; ++$row) { + $this->worksheet->fromArray($this->sampleDataInteger, null, "A{$row}", true); + } + } + + /** + * @revs(5) + * @Iterations(5) + * @OutputTimeUnit("milliseconds") + * @BeforeMethods("setUp") + */ + public function benchmarkPopulateStringValuesFromArray(): void + { + for ($row = 1; $row <= $this->rows; ++$row) { + $this->worksheet->fromArray($this->sampleDataString, null, "A{$row}", true); + } + } +} diff --git a/tests/Performance/Writer/AbstractBasicWriter.php b/tests/Performance/Writer/AbstractBasicWriter.php new file mode 100644 index 0000000000..b613b613f5 --- /dev/null +++ b/tests/Performance/Writer/AbstractBasicWriter.php @@ -0,0 +1,44 @@ +spreadsheet = new Spreadsheet(); + + $worksheet = $this->spreadsheet->getActiveSheet(); + + $this->buildWorksheet($worksheet, $rows, $columns); + } + + private function buildWorksheet(Worksheet $worksheet, int $rows, int $columns): void + { + $sampleData = [range(1, $columns)]; + + for ($row = 1; $row <= $rows; ++$row) { + $worksheet->fromArray($sampleData, null, "A{$row}", true); + } + } + + public function tearDown(): void + { + if (file_exists($this->fileName)) { + unlink($this->fileName); + } + } +} diff --git a/tests/Performance/Writer/Html/HtmlWriterBenchmark.php b/tests/Performance/Writer/Html/HtmlWriterBenchmark.php new file mode 100644 index 0000000000..2424beb6ff --- /dev/null +++ b/tests/Performance/Writer/Html/HtmlWriterBenchmark.php @@ -0,0 +1,26 @@ +spreadsheet); + $writer->save($this->fileName); + } +} diff --git a/tests/Performance/Writer/Ods/OdsWriterBenchmark.php b/tests/Performance/Writer/Ods/OdsWriterBenchmark.php new file mode 100644 index 0000000000..512c34950f --- /dev/null +++ b/tests/Performance/Writer/Ods/OdsWriterBenchmark.php @@ -0,0 +1,26 @@ +spreadsheet); + $writer->save($this->fileName); + } +} diff --git a/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php b/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php new file mode 100644 index 0000000000..9bc7183bad --- /dev/null +++ b/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php @@ -0,0 +1,32 @@ +spreadsheet); + $writer->save($this->fileName); + } +} diff --git a/tests/Performance/Writer/Xls/XlxWriterBenchmark.php b/tests/Performance/Writer/Xls/XlxWriterBenchmark.php new file mode 100644 index 0000000000..bec7f5d956 --- /dev/null +++ b/tests/Performance/Writer/Xls/XlxWriterBenchmark.php @@ -0,0 +1,26 @@ +spreadsheet); + $writer->save($this->fileName); + } +} diff --git a/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php b/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php new file mode 100644 index 0000000000..51e18226fc --- /dev/null +++ b/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php @@ -0,0 +1,26 @@ +spreadsheet); + $writer->save($this->fileName); + } +} diff --git a/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php b/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php new file mode 100644 index 0000000000..32caaed765 --- /dev/null +++ b/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php @@ -0,0 +1,32 @@ +spreadsheet); + $writer->save($this->fileName); + } +} From c548512bd3875f6a176dd19618d52ee3406693c6 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 1 Jun 2022 10:32:29 +0200 Subject: [PATCH 2/9] use php://temp for writer tests --- composer.json | 3 +++ tests/Performance/Writer/AbstractBasicWriter.php | 2 +- tests/Performance/Writer/Html/HtmlWriterBenchmark.php | 5 ----- tests/Performance/Writer/Ods/OdsWriterBenchmark.php | 5 ----- .../Xls/{XlxWriterBenchmark.php => XlsWriterBenchmark.php} | 7 +------ tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php | 7 +------ tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php | 5 ----- tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php | 5 ----- 8 files changed, 6 insertions(+), 33 deletions(-) rename tests/Performance/Writer/Xls/{XlxWriterBenchmark.php => XlsWriterBenchmark.php} (76%) diff --git a/composer.json b/composer.json index a0a00b2f62..009a48972d 100644 --- a/composer.json +++ b/composer.json @@ -52,6 +52,9 @@ ], "versions": [ "phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PHPCompatibility --runtime-set testVersion 7.3- -n" + ], + "bench": [ + "phpbench run tests/Performance/ --report=aggregate -n" ] }, "require": { diff --git a/tests/Performance/Writer/AbstractBasicWriter.php b/tests/Performance/Writer/AbstractBasicWriter.php index b613b613f5..066ad9ddd8 100644 --- a/tests/Performance/Writer/AbstractBasicWriter.php +++ b/tests/Performance/Writer/AbstractBasicWriter.php @@ -15,7 +15,7 @@ class AbstractBasicWriter /** * @var string */ - protected $fileName = 'performanceTestWrite.file'; + protected $fileName = 'php://temp'; public function __construct(int $columns = 32, int $rows = 512) { diff --git a/tests/Performance/Writer/Html/HtmlWriterBenchmark.php b/tests/Performance/Writer/Html/HtmlWriterBenchmark.php index 2424beb6ff..d1dfd45f70 100644 --- a/tests/Performance/Writer/Html/HtmlWriterBenchmark.php +++ b/tests/Performance/Writer/Html/HtmlWriterBenchmark.php @@ -7,11 +7,6 @@ class HtmlWriterBenchmark extends AbstractBasicWriter { - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.html'; - /** * @revs(5) * @Iterations(5) diff --git a/tests/Performance/Writer/Ods/OdsWriterBenchmark.php b/tests/Performance/Writer/Ods/OdsWriterBenchmark.php index 512c34950f..c57b57d8b5 100644 --- a/tests/Performance/Writer/Ods/OdsWriterBenchmark.php +++ b/tests/Performance/Writer/Ods/OdsWriterBenchmark.php @@ -7,11 +7,6 @@ class OdsWriterBenchmark extends AbstractBasicWriter { - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.ods'; - /** * @revs(5) * @Iterations(5) diff --git a/tests/Performance/Writer/Xls/XlxWriterBenchmark.php b/tests/Performance/Writer/Xls/XlsWriterBenchmark.php similarity index 76% rename from tests/Performance/Writer/Xls/XlxWriterBenchmark.php rename to tests/Performance/Writer/Xls/XlsWriterBenchmark.php index bec7f5d956..834b0c6b11 100644 --- a/tests/Performance/Writer/Xls/XlxWriterBenchmark.php +++ b/tests/Performance/Writer/Xls/XlsWriterBenchmark.php @@ -5,13 +5,8 @@ use PhpOffice\PhpSpreadsheet\Writer\Xls; use PhpOffice\PhpSpreadsheetPerformance\Writer\AbstractBasicWriter; -class XlxWriterBenchmark extends AbstractBasicWriter +class XlsWriterBenchmark extends AbstractBasicWriter { - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.xls'; - /** * @revs(5) * @Iterations(5) diff --git a/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php b/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php index 9bc7183bad..0c47e763c4 100644 --- a/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php +++ b/tests/Performance/Writer/Xls/XlsWriterLargeBenchmark.php @@ -5,18 +5,13 @@ use PhpOffice\PhpSpreadsheet\Writer\Xls; use PhpOffice\PhpSpreadsheetPerformance\Writer\AbstractBasicWriter; -class XlxWriterLargeBenchmark extends AbstractBasicWriter +class XlsWriterLargeBenchmark extends AbstractBasicWriter { public function __construct() { parent::__construct(128, 8192); } - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.xls'; - /** * @Groups({"slow"}) * @revs(3) diff --git a/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php b/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php index 51e18226fc..bc2153285f 100644 --- a/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php +++ b/tests/Performance/Writer/Xlsx/XlsxWriterBenchmark.php @@ -7,11 +7,6 @@ class XlsxWriterBenchmark extends AbstractBasicWriter { - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.xlsx'; - /** * @revs(5) * @Iterations(5) diff --git a/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php b/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php index 32caaed765..8bfefd65d4 100644 --- a/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php +++ b/tests/Performance/Writer/Xlsx/XlsxWriterLargeBenchmark.php @@ -12,11 +12,6 @@ public function __construct() parent::__construct(128, 8192); } - /** - * @var string - */ - protected $fileName = 'performanceTestWrite.xlsx'; - /** * @Groups({"slow"}) * @revs(3) From a9375b6dd701bf8008227aa6aa0624200678f0e0 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 15 Jun 2022 21:56:16 +0200 Subject: [PATCH 3/9] Abstract === Abstract --- tests/Performance/Writer/AbstractBasicWriter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Performance/Writer/AbstractBasicWriter.php b/tests/Performance/Writer/AbstractBasicWriter.php index 066ad9ddd8..02874f2638 100644 --- a/tests/Performance/Writer/AbstractBasicWriter.php +++ b/tests/Performance/Writer/AbstractBasicWriter.php @@ -5,7 +5,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; -class AbstractBasicWriter +abstract class AbstractBasicWriter { /** * @var Spreadsheet From 4606163f8b0f5e71ef51412ecf3f33e3e83c048f Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 15 Jun 2022 21:56:44 +0200 Subject: [PATCH 4/9] ReferenceHelper Benchmarks --- .../ReferenceHelper/AbstractInsertDelete.php | 44 +++++++++++++++++ .../ReferenceHelper/InsertColumnBenchmark.php | 47 +++++++++++++++++++ .../ReferenceHelper/InsertRowBenchmark.php | 47 +++++++++++++++++++ .../ReferenceHelper/RemoveColumnBenchmark.php | 47 +++++++++++++++++++ .../ReferenceHelper/RemoveRowBenchmark.php | 47 +++++++++++++++++++ 5 files changed, 232 insertions(+) create mode 100644 tests/Performance/ReferenceHelper/AbstractInsertDelete.php create mode 100644 tests/Performance/ReferenceHelper/InsertColumnBenchmark.php create mode 100644 tests/Performance/ReferenceHelper/InsertRowBenchmark.php create mode 100644 tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php create mode 100644 tests/Performance/ReferenceHelper/RemoveRowBenchmark.php diff --git a/tests/Performance/ReferenceHelper/AbstractInsertDelete.php b/tests/Performance/ReferenceHelper/AbstractInsertDelete.php new file mode 100644 index 0000000000..4f6cdb3b56 --- /dev/null +++ b/tests/Performance/ReferenceHelper/AbstractInsertDelete.php @@ -0,0 +1,44 @@ +spreadsheet = new Spreadsheet(); + + $worksheet = $this->spreadsheet->getActiveSheet(); + + $this->buildWorksheet($worksheet, $rows, $columns); + } + + private function buildWorksheet(Worksheet $worksheet, int $rows, int $columns): void + { + $sampleData = [range(1, $columns)]; + + for ($row = 1; $row <= $rows; ++$row) { + $worksheet->fromArray($sampleData, null, "A{$row}", true); + } + } + + public function tearDown(): void + { + if (file_exists($this->fileName)) { + unlink($this->fileName); + } + } +} diff --git a/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php new file mode 100644 index 0000000000..2e01070f67 --- /dev/null +++ b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php @@ -0,0 +1,47 @@ +spreadsheet->getActiveSheet()->insertNewColumnBefore('C', 2); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(5) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkInsertColumnsMid(): void + { + $this->spreadsheet->getActiveSheet()->insertNewColumnBefore('AB', 2); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(7) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkInsertColumnsLate(): void + { + $this->spreadsheet->getActiveSheet()->insertNewColumnBefore('BX', 2); + } +} diff --git a/tests/Performance/ReferenceHelper/InsertRowBenchmark.php b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php new file mode 100644 index 0000000000..d47885a8cd --- /dev/null +++ b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php @@ -0,0 +1,47 @@ +spreadsheet->getActiveSheet()->insertNewRowBefore(2, 4); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(7) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkInsertRowsMid(): void + { + $this->spreadsheet->getActiveSheet()->insertNewRowBefore(255, 4); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(11) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkInsertRowsLate(): void + { + $this->spreadsheet->getActiveSheet()->insertNewRowBefore(510, 4); + } +} diff --git a/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php new file mode 100644 index 0000000000..ebbe145877 --- /dev/null +++ b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php @@ -0,0 +1,47 @@ +spreadsheet->getActiveSheet()->removeColumn('C', 2); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(5) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkRemoveColumnsMid(): void + { + $this->spreadsheet->getActiveSheet()->removeColumn('AB', 2); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(7) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkRemoveColumnsLate(): void + { + $this->spreadsheet->getActiveSheet()->removeColumn('BX', 2); + } +} diff --git a/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php new file mode 100644 index 0000000000..292f23c283 --- /dev/null +++ b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php @@ -0,0 +1,47 @@ +spreadsheet->getActiveSheet()->removeRow(2, 4); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(7) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkRemoveRowsMid(): void + { + $this->spreadsheet->getActiveSheet()->removeRow(255, 4); + } + + /** + * @Groups({"slow"}) + * @revs(4) + * @Iterations(11) + * @OutputTimeUnit("seconds") + * @AfterMethods("tearDown") + */ + public function benchmarkRemoveRowsLate(): void + { + $this->spreadsheet->getActiveSheet()->removeRow(510, 4); + } +} From e42edb7fdd21b3e9de9b8d43afc85d23a860630b Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 15 Jun 2022 21:59:48 +0200 Subject: [PATCH 5/9] ReferenceHelper Benchmarks --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2c18a2291e..7a95082a0f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -211,7 +211,7 @@ jobs: run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Performance tests with PHPBench - run: ./vendor/bin/phpbench run tests/performance --report=aggregate + run: ./vendor/bin/phpbench run tests/Performance --report=aggregate coverage: runs-on: ubuntu-latest From bf9b61070a50932c9432d570a8cad1384fd6601d Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Thu, 16 Jun 2022 08:30:13 +0200 Subject: [PATCH 6/9] Resynch Composer lock file --- composer.lock | 6 +----- tests/Performance/Worksheet/PopulateWorksheetBenchmark.php | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index d445f93f37..ea25276b3b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fa9fa4814df8320d600551ca8ec11883", + "content-hash": "c99a93758c6c3e2acef67406f7ee2f2a", "packages": [ { "name": "ezyang/htmlpurifier", @@ -2303,10 +2303,6 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.7.7" - }, "funding": [ { "url": "https://github.com/ondrejmirtes", diff --git a/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php b/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php index 7b7be71a68..bbd3a98ab8 100644 --- a/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php +++ b/tests/Performance/Worksheet/PopulateWorksheetBenchmark.php @@ -29,7 +29,7 @@ class PopulateWorksheetBenchmark protected $spreadsheet; /** - * @var integer[] + * @var int[] */ protected $sampleDataInteger; From 44c1faccb017fd3239382e4a8cf230f6f3374110 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Thu, 16 Jun 2022 10:06:18 +0200 Subject: [PATCH 7/9] Adjust time units --- tests/Performance/ReferenceHelper/InsertColumnBenchmark.php | 6 +++--- tests/Performance/ReferenceHelper/InsertRowBenchmark.php | 6 +++--- tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php | 6 +++--- tests/Performance/ReferenceHelper/RemoveRowBenchmark.php | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php index 2e01070f67..87b430c5b3 100644 --- a/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php +++ b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php @@ -13,7 +13,7 @@ public function __construct() * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertColumnsEarly(): void @@ -25,7 +25,7 @@ public function benchmarkInsertColumnsEarly(): void * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertColumnsMid(): void @@ -37,7 +37,7 @@ public function benchmarkInsertColumnsMid(): void * @Groups({"slow"}) * @revs(4) * @Iterations(7) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertColumnsLate(): void diff --git a/tests/Performance/ReferenceHelper/InsertRowBenchmark.php b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php index d47885a8cd..a124f030ca 100644 --- a/tests/Performance/ReferenceHelper/InsertRowBenchmark.php +++ b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php @@ -13,7 +13,7 @@ public function __construct() * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertRowsEarly(): void @@ -25,7 +25,7 @@ public function benchmarkInsertRowsEarly(): void * @Groups({"slow"}) * @revs(4) * @Iterations(7) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertRowsMid(): void @@ -37,7 +37,7 @@ public function benchmarkInsertRowsMid(): void * @Groups({"slow"}) * @revs(4) * @Iterations(11) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkInsertRowsLate(): void diff --git a/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php index ebbe145877..c334ddd64b 100644 --- a/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php +++ b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php @@ -13,7 +13,7 @@ public function __construct() * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveColumnsEarly(): void @@ -25,7 +25,7 @@ public function benchmarkRemoveColumnsEarly(): void * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveColumnsMid(): void @@ -37,7 +37,7 @@ public function benchmarkRemoveColumnsMid(): void * @Groups({"slow"}) * @revs(4) * @Iterations(7) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveColumnsLate(): void diff --git a/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php index 292f23c283..916e12a83e 100644 --- a/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php +++ b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php @@ -13,7 +13,7 @@ public function __construct() * @Groups({"slow"}) * @revs(4) * @Iterations(5) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveRowsEarly(): void @@ -25,7 +25,7 @@ public function benchmarkRemoveRowsEarly(): void * @Groups({"slow"}) * @revs(4) * @Iterations(7) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveRowsMid(): void @@ -37,7 +37,7 @@ public function benchmarkRemoveRowsMid(): void * @Groups({"slow"}) * @revs(4) * @Iterations(11) - * @OutputTimeUnit("seconds") + * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ public function benchmarkRemoveRowsLate(): void From bfa6b8e9a5bb14c5598a909e671e3a4708f3ab36 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Mon, 20 Jun 2022 13:20:20 +0200 Subject: [PATCH 8/9] Some Cell Collection benchmarking --- .../Collection/AbstractCellCollection.php | 44 ++++++++++++ .../Collection/MaxRowColumnBenchmark.php | 71 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 tests/Performance/Collection/AbstractCellCollection.php create mode 100644 tests/Performance/Collection/MaxRowColumnBenchmark.php diff --git a/tests/Performance/Collection/AbstractCellCollection.php b/tests/Performance/Collection/AbstractCellCollection.php new file mode 100644 index 0000000000..ea0de60ef4 --- /dev/null +++ b/tests/Performance/Collection/AbstractCellCollection.php @@ -0,0 +1,44 @@ +spreadsheet = new Spreadsheet(); + + $worksheet = $this->spreadsheet->getActiveSheet(); + + $this->buildWorksheet($worksheet, $rows, $columns); + } + + private function buildWorksheet(Worksheet $worksheet, int $rows, int $columns): void + { + $sampleData = [range(1, $columns)]; + + for ($row = 1; $row <= $rows; ++$row) { + $worksheet->fromArray($sampleData, null, "A{$row}", true); + } + } + + public function tearDown(): void + { + if (file_exists($this->fileName)) { + unlink($this->fileName); + } + } +} diff --git a/tests/Performance/Collection/MaxRowColumnBenchmark.php b/tests/Performance/Collection/MaxRowColumnBenchmark.php new file mode 100644 index 0000000000..415b6a48df --- /dev/null +++ b/tests/Performance/Collection/MaxRowColumnBenchmark.php @@ -0,0 +1,71 @@ +spreadsheet->getActiveSheet() + ->getCellCollection()->getHighestRow(); + } + + /** + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @AfterMethods("tearDown") + */ + public function benchmarkGetHighestRowWithArgument(): void + { + $this->spreadsheet->getActiveSheet() + ->getCellCollection()->getHighestRow('EQ'); + } + + /** + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @AfterMethods("tearDown") + */ + public function benchmarkGetHighestColumnNoArgument(): void + { + $this->spreadsheet->getActiveSheet() + ->getCellCollection()->getHighestColumn(); + } + + /** + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @AfterMethods("tearDown") + */ + public function benchmarkGetHighestColumnWithArgument(): void + { + $this->spreadsheet->getActiveSheet() + ->getCellCollection()->getHighestColumn(256); + } + + /** + * @revs(10) + * @Iterations(20) + * @OutputTimeUnit("milliseconds") + * @AfterMethods("tearDown") + */ + public function benchmarkGetHighestRowAndColum(): void + { + $this->spreadsheet->getActiveSheet() + ->getCellCollection()->getHighestRowAndColumn(); + } +} From 12e6d0ffe1ca2d3e6c4d11502033fb7c2252d8c2 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Sun, 20 Nov 2022 10:51:11 +0100 Subject: [PATCH 9/9] Add benchmark for merging cells --- composer.json | 12 +- composer.lock | 565 ++++++++++++++---- .../ReferenceHelper/InsertColumnBenchmark.php | 4 +- .../ReferenceHelper/InsertRowBenchmark.php | 6 +- .../ReferenceHelper/RemoveColumnBenchmark.php | 4 +- .../ReferenceHelper/RemoveRowBenchmark.php | 6 +- .../Worksheet/MergeCellsBenchmark.php | 28 + 7 files changed, 479 insertions(+), 146 deletions(-) create mode 100644 tests/Performance/Worksheet/MergeCellsBenchmark.php diff --git a/composer.json b/composer.json index 452295ccb2..0e1e528eeb 100644 --- a/composer.json +++ b/composer.json @@ -82,15 +82,15 @@ }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "dompdf/dompdf": "^1.0 || ^2.0", - "friendsofphp/php-cs-fixer": "^3.2", + "dompdf/dompdf": "^2.0", + "friendsofphp/php-cs-fixer": "^3.13", "mitoteam/jpgraph": "^10.2.4", - "mpdf/mpdf": "^8.1.1", + "mpdf/mpdf": "^8.1.2", "phpbench/phpbench": "^1.2", "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5 || ^9.0", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-phpunit": "^1.2", + "phpunit/phpunit": "^9.0", "squizlabs/php_codesniffer": "^3.7", "tecnickcom/tcpdf": "^6.5" }, diff --git a/composer.lock b/composer.lock index 9a425e8700..1ca894b7e4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "60da78cdd66329fbd4e0d50324363072", + "content-hash": "dd9ec5edb3ee1bd94f2e2a378399405d", "packages": [ { "name": "ezyang/htmlpurifier", @@ -523,16 +523,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -547,7 +547,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -586,7 +586,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -602,22 +602,22 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" } ], "packages-dev": [ { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { @@ -659,7 +659,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -675,7 +675,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", @@ -830,12 +830,12 @@ "source": { "type": "git", "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "231b4e82eee01f16537c8ac3fce31c1f83320c80" + "reference": "cd79216fba0b4000cd27062a5953dbd82e908c12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/231b4e82eee01f16537c8ac3fce31c1f83320c80", - "reference": "231b4e82eee01f16537c8ac3fce31c1f83320c80", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/cd79216fba0b4000cd27062a5953dbd82e908c12", + "reference": "cd79216fba0b4000cd27062a5953dbd82e908c12", "shasum": "" }, "require": { @@ -854,11 +854,11 @@ "default-branch": true, "type": "composer-plugin", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -901,7 +901,7 @@ "issues": "https://github.com/PHPCSStandards/composer-installer/issues", "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2022-07-26T12:51:47+00:00" + "time": "2022-11-16T08:42:42+00:00" }, { "name": "doctrine/annotations", @@ -1186,16 +1186,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.11.0", + "version": "v3.13.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7dcdea3f2f5f473464e835be9be55283ff8cfdc3", - "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a6232229a8309e8811dc751c28b91cb34b2943e1", + "reference": "a6232229a8309e8811dc751c28b91cb34b2943e1", "shasum": "" }, "require": { @@ -1219,7 +1219,7 @@ }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", + "keradus/cli-executor": "^2.0", "mikey179/vfsstream": "^1.6.10", "php-coveralls/php-coveralls": "^2.5.2", "php-cs-fixer/accessible-object": "^1.1", @@ -1228,8 +1228,8 @@ "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", "symfony/phpunit-bridge": "^6.0", "symfony/yaml": "^5.4 || ^6.0" }, @@ -1262,8 +1262,8 @@ ], "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.11.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.0" }, "funding": [ { @@ -1271,7 +1271,7 @@ "type": "github" } ], - "time": "2022-09-01T18:24:51+00:00" + "time": "2022-10-31T19:28:50+00:00" }, { "name": "masterminds/html5", @@ -1526,16 +1526,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -1576,9 +1576,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "paragonie/random_compat", @@ -1885,6 +1885,198 @@ }, "time": "2015-12-19T14:08:53+00:00" }, + { + "name": "phpbench/container", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpbench/container.git", + "reference": "6d555ff7174fca13f9b1ec0b4a089ed41d0ab392" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/container/zipball/6d555ff7174fca13f9b1ec0b4a089ed41d0ab392", + "reference": "6d555ff7174fca13f9b1ec0b4a089ed41d0ab392", + "shasum": "" + }, + "require": { + "psr/container": "^1.0|^2.0", + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.52", + "phpunit/phpunit": "^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpBench\\DependencyInjection\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "Simple, configurable, service container.", + "support": { + "issues": "https://github.com/phpbench/container/issues", + "source": "https://github.com/phpbench/container/tree/2.2.1" + }, + "time": "2022-01-25T10:17:35+00:00" + }, + { + "name": "phpbench/dom", + "version": "0.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpbench/dom.git", + "reference": "b013b717832ddbaadf2a40984b04bc66af9a7110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/dom/zipball/b013b717832ddbaadf2a40984b04bc66af9a7110", + "reference": "b013b717832ddbaadf2a40984b04bc66af9a7110", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^7.2||^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.18", + "phpstan/phpstan": "^0.12.83", + "phpunit/phpunit": "^8.0||^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpBench\\Dom\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "DOM wrapper to simplify working with the PHP DOM implementation", + "support": { + "issues": "https://github.com/phpbench/dom/issues", + "source": "https://github.com/phpbench/dom/tree/0.3.2" + }, + "time": "2021-09-24T15:26:07+00:00" + }, + { + "name": "phpbench/phpbench", + "version": "1.2.7", + "source": { + "type": "git", + "url": "https://github.com/phpbench/phpbench.git", + "reference": "dce145304abbb16c8d9af69c19d96f47e9d0e670" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/dce145304abbb16c8d9af69c19d96f47e9d0e670", + "reference": "dce145304abbb16c8d9af69c19d96f47e9d0e670", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.13", + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "php": "^7.3 || ^8.0", + "phpbench/container": "^2.1", + "phpbench/dom": "~0.3.1", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "seld/jsonlint": "^1.1", + "symfony/console": "^4.2 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.2 || ^5.0 || ^6.0", + "symfony/finder": "^4.2 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0", + "symfony/process": "^4.2 || ^5.0 || ^6.0", + "webmozart/glob": "^4.6" + }, + "require-dev": { + "dantleech/invoke": "^2.0", + "friendsofphp/php-cs-fixer": "^3.0", + "jangregor/phpstan-prophecy": "^1.0", + "phpspec/prophecy": "^1.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5.8 || ^9.0", + "symfony/error-handler": "^5.2 || ^6.0", + "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0" + }, + "suggest": { + "ext-xdebug": "For Xdebug profiling extension." + }, + "bin": [ + "bin/phpbench" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "files": [ + "lib/Report/Func/functions.php" + ], + "psr-4": { + "PhpBench\\": "lib/", + "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "PHP Benchmarking Framework", + "support": { + "issues": "https://github.com/phpbench/phpbench/issues", + "source": "https://github.com/phpbench/phpbench/tree/1.2.7" + }, + "funding": [ + { + "url": "https://github.com/dantleech", + "type": "github" + } + ], + "time": "2022-10-15T09:57:51+00:00" + }, { "name": "phpcompatibility/php-compatibility", "version": "9.3.5", @@ -1949,16 +2141,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.6", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618" + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c386ab2741e64cc9e21729f891b28b2b10fe6618", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d6fdf01c53978b6429f1393ba4afeca39cc68afa", + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa", "shasum": "" }, "require": { @@ -1988,7 +2180,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.6" + "source": "https://github.com/phpstan/phpstan/tree/1.9.2" }, "funding": [ { @@ -2004,25 +2196,25 @@ "type": "tidelift" } ], - "time": "2022-09-23T09:54:39+00:00" + "time": "2022-11-10T09:56:11+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "1.1.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "4a3c437c09075736285d1cabb5c75bf27ed0bc84" + "reference": "dea1f87344c6964c607d9076dee42d891f3923f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/4a3c437c09075736285d1cabb5c75bf27ed0bc84", - "reference": "4a3c437c09075736285d1cabb5c75bf27ed0bc84", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/dea1f87344c6964c607d9076dee42d891f3923f0", + "reference": "dea1f87344c6964c607d9076dee42d891f3923f0", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.5.0" + "phpstan/phpstan": "^1.8.11" }, "conflict": { "phpunit/phpunit": "<7.0" @@ -2054,22 +2246,22 @@ "description": "PHPUnit extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.1.1" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.2.2" }, - "time": "2022-04-20T15:24:25+00:00" + "time": "2022-10-28T10:23:07+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", "shasum": "" }, "require": { @@ -2125,7 +2317,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" }, "funding": [ { @@ -2133,7 +2325,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2022-11-18T07:47:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2378,16 +2570,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.25", + "version": "9.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", "shasum": "" }, "require": { @@ -2460,7 +2652,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" }, "funding": [ { @@ -2476,7 +2668,7 @@ "type": "tidelift" } ], - "time": "2022-09-25T03:44:45+00:00" + "time": "2022-10-28T06:00:21+00:00" }, { "name": "psr/cache", @@ -3692,6 +3884,70 @@ ], "time": "2020-09-28T06:39:44+00:00" }, + { + "name": "seld/jsonlint", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "4211420d25eba80712bff236a98960ef68b866b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2022-04-01T13:37:23+00:00" + }, { "name": "setasign/fpdi", "version": "v2.3.6", @@ -3822,16 +4078,16 @@ }, { "name": "symfony/console", - "version": "v5.4.12", + "version": "v5.4.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", - "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "url": "https://api.github.com/repos/symfony/console/zipball/ea59bb0edfaf9f28d18d8791410ee0355f317669", + "reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669", "shasum": "" }, "require": { @@ -3901,7 +4157,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.12" + "source": "https://github.com/symfony/console/tree/v5.4.15" }, "funding": [ { @@ -3917,7 +4173,7 @@ "type": "tidelift" } ], - "time": "2022-08-17T13:18:05+00:00" + "time": "2022-10-26T21:41:52+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4152,16 +4408,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.12", + "version": "v5.4.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", - "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", "shasum": "" }, "require": { @@ -4196,7 +4452,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.12" + "source": "https://github.com/symfony/filesystem/tree/v5.4.13" }, "funding": [ { @@ -4212,7 +4468,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T13:48:16+00:00" + "time": "2022-09-21T19:53:16+00:00" }, { "name": "symfony/finder", @@ -4348,16 +4604,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -4372,7 +4628,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4410,7 +4666,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -4426,20 +4682,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -4451,7 +4707,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4491,7 +4747,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -4507,20 +4763,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -4532,7 +4788,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4575,7 +4831,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -4591,20 +4847,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -4613,7 +4869,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4654,7 +4910,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -4670,20 +4926,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -4692,7 +4948,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4737,7 +4993,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -4753,20 +5009,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -4775,7 +5031,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4816,7 +5072,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -4832,7 +5088,7 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", @@ -4981,16 +5237,16 @@ }, { "name": "symfony/stopwatch", - "version": "v5.4.5", + "version": "v5.4.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6df7a3effde34d81717bbef4591e5ffe32226d69", + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69", "shasum": "" }, "require": { @@ -5023,7 +5279,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.13" }, "funding": [ { @@ -5039,20 +5295,20 @@ "type": "tidelift" } ], - "time": "2022-02-18T16:06:09+00:00" + "time": "2022-09-28T13:19:49+00:00" }, { "name": "symfony/string", - "version": "v5.4.12", + "version": "v5.4.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058" + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058", - "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058", + "url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", + "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", "shasum": "" }, "require": { @@ -5109,7 +5365,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.12" + "source": "https://github.com/symfony/string/tree/v5.4.15" }, "funding": [ { @@ -5125,7 +5381,7 @@ "type": "tidelift" } ], - "time": "2022-08-12T17:03:11+00:00" + "time": "2022-10-05T15:16:54+00:00" }, { "name": "tecnickcom/tcpdf", @@ -5248,6 +5504,55 @@ } ], "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/glob", + "version": "4.6.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/glob.git", + "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/glob/zipball/3c17f7dec3d9d0e87b575026011f2e75a56ed655", + "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Glob\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A PHP implementation of Ant's glob.", + "support": { + "issues": "https://github.com/webmozarts/glob/issues", + "source": "https://github.com/webmozarts/glob/tree/4.6.0" + }, + "time": "2022-05-24T19:45:58+00:00" } ], "aliases": [], @@ -5258,7 +5563,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "ext-ctype": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -5274,5 +5579,5 @@ "ext-zlib": "*" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php index 87b430c5b3..21c2280121 100644 --- a/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php +++ b/tests/Performance/ReferenceHelper/InsertColumnBenchmark.php @@ -12,7 +12,7 @@ public function __construct() /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -24,7 +24,7 @@ public function benchmarkInsertColumnsEarly(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ diff --git a/tests/Performance/ReferenceHelper/InsertRowBenchmark.php b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php index a124f030ca..cd1ae7262a 100644 --- a/tests/Performance/ReferenceHelper/InsertRowBenchmark.php +++ b/tests/Performance/ReferenceHelper/InsertRowBenchmark.php @@ -12,7 +12,7 @@ public function __construct() /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -24,7 +24,7 @@ public function benchmarkInsertRowsEarly(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(7) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -36,7 +36,7 @@ public function benchmarkInsertRowsMid(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(11) + * @Iterations(7) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ diff --git a/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php index c334ddd64b..afd321e1df 100644 --- a/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php +++ b/tests/Performance/ReferenceHelper/RemoveColumnBenchmark.php @@ -12,7 +12,7 @@ public function __construct() /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -24,7 +24,7 @@ public function benchmarkRemoveColumnsEarly(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ diff --git a/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php index 916e12a83e..3068d404c6 100644 --- a/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php +++ b/tests/Performance/ReferenceHelper/RemoveRowBenchmark.php @@ -12,7 +12,7 @@ public function __construct() /** * @Groups({"slow"}) * @revs(4) - * @Iterations(5) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -24,7 +24,7 @@ public function benchmarkRemoveRowsEarly(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(7) + * @Iterations(4) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ @@ -36,7 +36,7 @@ public function benchmarkRemoveRowsMid(): void /** * @Groups({"slow"}) * @revs(4) - * @Iterations(11) + * @Iterations(7) * @OutputTimeUnit("milliseconds") * @AfterMethods("tearDown") */ diff --git a/tests/Performance/Worksheet/MergeCellsBenchmark.php b/tests/Performance/Worksheet/MergeCellsBenchmark.php new file mode 100644 index 0000000000..b19b8debff --- /dev/null +++ b/tests/Performance/Worksheet/MergeCellsBenchmark.php @@ -0,0 +1,28 @@ +spreadsheet->getActiveSheet()->mergeCells([$column, $row, $column + 2, $row + 2]); + } + } + } +}