summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-timer
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2022-03-22 12:24:31 +0300
committerAndrew Dolgov <[email protected]>2022-03-22 12:24:31 +0300
commit1c4f7ab3b838b23afb2ee4dab14acbf75956e952 (patch)
tree0a19274107d717efe92d2c0376cd3105fead5a11 /vendor/phpunit/php-timer
parent711662948768492e8d05b778a7d80eacaec368d2 (diff)
* add phpunit as a dev dependency
* add some basic tests for UrlHelper::rewrite_relative() * fix UrlHelper::rewrite_relative() to work better on non-absolute relative URL paths
Diffstat (limited to 'vendor/phpunit/php-timer')
-rw-r--r--vendor/phpunit/php-timer/.psalm/baseline.xml2
-rw-r--r--vendor/phpunit/php-timer/.psalm/config.xml16
-rw-r--r--vendor/phpunit/php-timer/ChangeLog.md138
-rw-r--r--vendor/phpunit/php-timer/LICENSE33
-rw-r--r--vendor/phpunit/php-timer/README.md104
-rw-r--r--vendor/phpunit/php-timer/composer.json45
-rw-r--r--vendor/phpunit/php-timer/src/Duration.php109
-rw-r--r--vendor/phpunit/php-timer/src/ResourceUsageFormatter.php73
-rw-r--r--vendor/phpunit/php-timer/src/Timer.php40
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/Exception.php16
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php16
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php16
12 files changed, 608 insertions, 0 deletions
diff --git a/vendor/phpunit/php-timer/.psalm/baseline.xml b/vendor/phpunit/php-timer/.psalm/baseline.xml
new file mode 100644
index 000000000..77e688e07
--- /dev/null
+++ b/vendor/phpunit/php-timer/.psalm/baseline.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<files psalm-version="4.0.1@b1e2e30026936ef8d5bf6a354d1c3959b6231f44"/>
diff --git a/vendor/phpunit/php-timer/.psalm/config.xml b/vendor/phpunit/php-timer/.psalm/config.xml
new file mode 100644
index 000000000..15abef058
--- /dev/null
+++ b/vendor/phpunit/php-timer/.psalm/config.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<psalm
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="https://getpsalm.org/schema/config"
+ xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
+ resolveFromConfigFile="false"
+ totallyTyped="true"
+ errorBaseline=".psalm/baseline.xml"
+>
+ <projectFiles>
+ <directory name="src" />
+ <ignoreFiles>
+ <directory name="vendor" />
+ </ignoreFiles>
+ </projectFiles>
+</psalm>
diff --git a/vendor/phpunit/php-timer/ChangeLog.md b/vendor/phpunit/php-timer/ChangeLog.md
new file mode 100644
index 000000000..34ef7d1d7
--- /dev/null
+++ b/vendor/phpunit/php-timer/ChangeLog.md
@@ -0,0 +1,138 @@
+# ChangeLog
+
+All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
+
+## [5.0.3] - 2020-10-26
+
+### Fixed
+
+* `SebastianBergmann\Timer\Exception` now correctly extends `\Throwable`
+
+## [5.0.2] - 2020-09-28
+
+### Changed
+
+* Changed PHP version constraint in `composer.json` from `^7.3 || ^8.0` to `>=7.3`
+
+## [5.0.1] - 2020-06-26
+
+### Added
+
+* This component is now supported on PHP 8
+
+## [5.0.0] - 2020-06-07
+
+### Changed
+
+* Parameter type for `SebastianBergmann\Timer\Duration::fromMicroseconds()` was changed from `int` to `float`
+* Parameter type for `SebastianBergmann\Timer\Duration::fromNanoseconds()` was changed from `int` to `float`
+* Return type for `SebastianBergmann\Timer\Duration::asNanoseconds()` was changed from `int` to `float`
+
+### Fixed
+
+* [#31](https://github.com/sebastianbergmann/php-timer/issues/31): Type Error on 32-bit systems (where `hrtime()` returns `float` instead of `int`)
+
+## [4.0.0] - 2020-06-01
+
+### Added
+
+* Introduced `Duration` value object for encapsulating a duration with nanosecond granularity
+* Introduced `ResourceUsageFormatter` object for formatting resource usage with option to explicitly pass a duration (instead of looking at the unreliable `$_SERVER['REQUEST_TIME_FLOAT']` variable)
+
+### Changed
+
+* The methods of `Timer` are no longer static
+* `Timer::stop()` now returns a `Duration` value object
+
+### Removed
+
+* Functionality that is now implemented in `Duration` and `ResourceUsageFormatter` has been removed from `Timer`
+
+## [3.1.4] - 2020-04-20
+
+### Changed
+
+* `Timer::timeSinceStartOfRequest()` no longer tries `$_SERVER['REQUEST_TIME']` when `$_SERVER['REQUEST_TIME_FLOAT']` is not available (`$_SERVER['REQUEST_TIME_FLOAT']` was added in PHP 5.4 and this library requires PHP 7.3)
+* Improved exception messages when `$_SERVER['REQUEST_TIME_FLOAT']` is not set or is not of type `float`
+
+### Changed
+
+## [3.1.3] - 2020-04-20
+
+### Changed
+
+* `Timer::timeSinceStartOfRequest()` now raises an exception if `$_SERVER['REQUEST_TIME_FLOAT']` does not contain a `float` (or `$_SERVER['REQUEST_TIME']` does not contain an `int`)
+
+## [3.1.2] - 2020-04-17
+
+### Changed
+
+* Improved the fix for [#30](https://github.com/sebastianbergmann/php-timer/issues/30) and restored usage of `hrtime()`
+
+## [3.1.1] - 2020-04-17
+
+### Fixed
+
+* [#30](https://github.com/sebastianbergmann/php-timer/issues/30): Resolution of time returned by `Timer::stop()` is different than before (this reverts using `hrtime()` instead of `microtime()`)
+
+## [3.1.0] - 2020-04-17
+
+### Added
+
+* `Timer::secondsToShortTimeString()` as alternative to `Timer::secondsToTimeString()`
+
+### Changed
+
+* `Timer::start()` and `Timer::stop()` now use `hrtime()` (high resolution monotonic timer) instead of `microtime()`
+* `Timer::timeSinceStartOfRequest()` now uses `Timer::secondsToShortTimeString()` for time formatting
+* Improved formatting of `Timer::secondsToTimeString()` result
+
+## [3.0.0] - 2020-02-07
+
+### Removed
+
+* This component is no longer supported on PHP 7.1 and PHP 7.2
+
+## [2.1.2] - 2019-06-07
+
+### Fixed
+
+* [#21](https://github.com/sebastianbergmann/php-timer/pull/21): Formatting of memory consumption does not work on 32bit systems
+
+## [2.1.1] - 2019-02-20
+
+### Changed
+
+* Improved formatting of memory consumption for `resourceUsage()`
+
+## [2.1.0] - 2019-02-20
+
+### Changed
+
+* Improved formatting of memory consumption for `resourceUsage()`
+
+## [2.0.0] - 2018-02-01
+
+### Changed
+
+* This component now uses namespaces
+
+### Removed
+
+* This component is no longer supported on PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, and PHP 7.0
+
+[5.0.3]: https://github.com/sebastianbergmann/php-timer/compare/5.0.2...5.0.3
+[5.0.2]: https://github.com/sebastianbergmann/php-timer/compare/5.0.1...5.0.2
+[5.0.1]: https://github.com/sebastianbergmann/php-timer/compare/5.0.0...5.0.1
+[5.0.0]: https://github.com/sebastianbergmann/php-timer/compare/4.0.0...5.0.0
+[4.0.0]: https://github.com/sebastianbergmann/php-timer/compare/3.1.4...4.0.0
+[3.1.4]: https://github.com/sebastianbergmann/php-timer/compare/3.1.3...3.1.4
+[3.1.3]: https://github.com/sebastianbergmann/php-timer/compare/3.1.2...3.1.3
+[3.1.2]: https://github.com/sebastianbergmann/php-timer/compare/3.1.1...3.1.2
+[3.1.1]: https://github.com/sebastianbergmann/php-timer/compare/3.1.0...3.1.1
+[3.1.0]: https://github.com/sebastianbergmann/php-timer/compare/3.0.0...3.1.0
+[3.0.0]: https://github.com/sebastianbergmann/php-timer/compare/2.1.2...3.0.0
+[2.1.2]: https://github.com/sebastianbergmann/php-timer/compare/2.1.1...2.1.2
+[2.1.1]: https://github.com/sebastianbergmann/php-timer/compare/2.1.0...2.1.1
+[2.1.0]: https://github.com/sebastianbergmann/php-timer/compare/2.0.0...2.1.0
+[2.0.0]: https://github.com/sebastianbergmann/php-timer/compare/1.0.9...2.0.0
diff --git a/vendor/phpunit/php-timer/LICENSE b/vendor/phpunit/php-timer/LICENSE
new file mode 100644
index 000000000..4193d8ae6
--- /dev/null
+++ b/vendor/phpunit/php-timer/LICENSE
@@ -0,0 +1,33 @@
+phpunit/php-timer
+
+Copyright (c) 2010-2020, Sebastian Bergmann <[email protected]>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of Sebastian Bergmann nor the names of his
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/phpunit/php-timer/README.md b/vendor/phpunit/php-timer/README.md
new file mode 100644
index 000000000..a7d1e70de
--- /dev/null
+++ b/vendor/phpunit/php-timer/README.md
@@ -0,0 +1,104 @@
+# phpunit/php-timer
+
+[![CI Status](https://github.com/sebastianbergmann/php-timer/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/php-timer/actions)
+[![Type Coverage](https://shepherd.dev/github/sebastianbergmann/php-timer/coverage.svg)](https://shepherd.dev/github/sebastianbergmann/php-timer)
+
+Utility class for timing things, factored out of PHPUnit into a stand-alone component.
+
+## Installation
+
+You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
+
+```
+composer require phpunit/php-timer
+```
+
+If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
+
+```
+composer require --dev phpunit/php-timer
+```
+
+## Usage
+
+### Basic Timing
+
+```php
+require __DIR__ . '/vendor/autoload.php';
+
+use SebastianBergmann\Timer\Timer;
+
+$timer = new Timer;
+
+$timer->start();
+
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+$duration = $timer->stop();
+
+var_dump(get_class($duration));
+var_dump($duration->asString());
+var_dump($duration->asSeconds());
+var_dump($duration->asMilliseconds());
+var_dump($duration->asMicroseconds());
+var_dump($duration->asNanoseconds());
+```
+
+The code above yields the output below:
+
+```
+string(32) "SebastianBergmann\Timer\Duration"
+string(9) "00:00.002"
+float(0.002851062)
+float(2.851062)
+float(2851.062)
+int(2851062)
+```
+
+### Resource Consumption
+
+#### Explicit duration
+
+```php
+require __DIR__ . '/vendor/autoload.php';
+
+use SebastianBergmann\Timer\ResourceUsageFormatter;
+use SebastianBergmann\Timer\Timer;
+
+$timer = new Timer;
+$timer->start();
+
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+print (new ResourceUsageFormatter)->resourceUsage($timer->stop());
+```
+
+The code above yields the output below:
+
+```
+Time: 00:00.002, Memory: 6.00 MB
+```
+
+#### Duration since PHP Startup (using unreliable `$_SERVER['REQUEST_TIME_FLOAT']`)
+
+```php
+require __DIR__ . '/vendor/autoload.php';
+
+use SebastianBergmann\Timer\ResourceUsageFormatter;
+
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+print (new ResourceUsageFormatter)->resourceUsageSinceStartOfRequest();
+```
+
+The code above yields the output below:
+
+```
+Time: 00:00.002, Memory: 6.00 MB
+```
diff --git a/vendor/phpunit/php-timer/composer.json b/vendor/phpunit/php-timer/composer.json
new file mode 100644
index 000000000..001701c24
--- /dev/null
+++ b/vendor/phpunit/php-timer/composer.json
@@ -0,0 +1,45 @@
+{
+ "name": "phpunit/php-timer",
+ "description": "Utility class for timing",
+ "type": "library",
+ "keywords": [
+ "timer"
+ ],
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "license": "BSD-3-Clause",
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "[email protected]",
+ "role": "lead"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues"
+ },
+ "prefer-stable": true,
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "config": {
+ "platform": {
+ "php": "7.3.0"
+ },
+ "optimize-autoloader": true,
+ "sort-packages": true
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ }
+}
+
diff --git a/vendor/phpunit/php-timer/src/Duration.php b/vendor/phpunit/php-timer/src/Duration.php
new file mode 100644
index 000000000..e52bf018f
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/Duration.php
@@ -0,0 +1,109 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function floor;
+use function sprintf;
+
+/**
+ * @psalm-immutable
+ */
+final class Duration
+{
+ /**
+ * @var float
+ */
+ private $nanoseconds;
+
+ /**
+ * @var int
+ */
+ private $hours;
+
+ /**
+ * @var int
+ */
+ private $minutes;
+
+ /**
+ * @var int
+ */
+ private $seconds;
+
+ /**
+ * @var int
+ */
+ private $milliseconds;
+
+ public static function fromMicroseconds(float $microseconds): self
+ {
+ return new self($microseconds * 1000);
+ }
+
+ public static function fromNanoseconds(float $nanoseconds): self
+ {
+ return new self($nanoseconds);
+ }
+
+ private function __construct(float $nanoseconds)
+ {
+ $this->nanoseconds = $nanoseconds;
+ $timeInMilliseconds = $nanoseconds / 1000000;
+ $hours = floor($timeInMilliseconds / 60 / 60 / 1000);
+ $hoursInMilliseconds = $hours * 60 * 60 * 1000;
+ $minutes = floor($timeInMilliseconds / 60 / 1000) % 60;
+ $minutesInMilliseconds = $minutes * 60 * 1000;
+ $seconds = floor(($timeInMilliseconds - $hoursInMilliseconds - $minutesInMilliseconds) / 1000);
+ $secondsInMilliseconds = $seconds * 1000;
+ $milliseconds = $timeInMilliseconds - $hoursInMilliseconds - $minutesInMilliseconds - $secondsInMilliseconds;
+ $this->hours = (int) $hours;
+ $this->minutes = $minutes;
+ $this->seconds = (int) $seconds;
+ $this->milliseconds = (int) $milliseconds;
+ }
+
+ public function asNanoseconds(): float
+ {
+ return $this->nanoseconds;
+ }
+
+ public function asMicroseconds(): float
+ {
+ return $this->nanoseconds / 1000;
+ }
+
+ public function asMilliseconds(): float
+ {
+ return $this->nanoseconds / 1000000;
+ }
+
+ public function asSeconds(): float
+ {
+ return $this->nanoseconds / 1000000000;
+ }
+
+ public function asString(): string
+ {
+ $result = '';
+
+ if ($this->hours > 0) {
+ $result = sprintf('%02d', $this->hours) . ':';
+ }
+
+ $result .= sprintf('%02d', $this->minutes) . ':';
+ $result .= sprintf('%02d', $this->seconds);
+
+ if ($this->milliseconds > 0) {
+ $result .= '.' . sprintf('%03d', $this->milliseconds);
+ }
+
+ return $result;
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php b/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php
new file mode 100644
index 000000000..ad7926277
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php
@@ -0,0 +1,73 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function is_float;
+use function memory_get_peak_usage;
+use function microtime;
+use function sprintf;
+
+final class ResourceUsageFormatter
+{
+ /**
+ * @psalm-var array<string,int>
+ */
+ private const SIZES = [
+ 'GB' => 1073741824,
+ 'MB' => 1048576,
+ 'KB' => 1024,
+ ];
+
+ public function resourceUsage(Duration $duration): string
+ {
+ return sprintf(
+ 'Time: %s, Memory: %s',
+ $duration->asString(),
+ $this->bytesToString(memory_get_peak_usage(true))
+ );
+ }
+
+ /**
+ * @throws TimeSinceStartOfRequestNotAvailableException
+ */
+ public function resourceUsageSinceStartOfRequest(): string
+ {
+ if (!isset($_SERVER['REQUEST_TIME_FLOAT'])) {
+ throw new TimeSinceStartOfRequestNotAvailableException(
+ 'Cannot determine time at which the request started because $_SERVER[\'REQUEST_TIME_FLOAT\'] is not available'
+ );
+ }
+
+ if (!is_float($_SERVER['REQUEST_TIME_FLOAT'])) {
+ throw new TimeSinceStartOfRequestNotAvailableException(
+ 'Cannot determine time at which the request started because $_SERVER[\'REQUEST_TIME_FLOAT\'] is not of type float'
+ );
+ }
+
+ return $this->resourceUsage(
+ Duration::fromMicroseconds(
+ (1000000 * (microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']))
+ )
+ );
+ }
+
+ private function bytesToString(int $bytes): string
+ {
+ foreach (self::SIZES as $unit => $value) {
+ if ($bytes >= $value) {
+ return sprintf('%.2f %s', $bytes >= 1024 ? $bytes / $value : $bytes, $unit);
+ }
+ }
+
+ // @codeCoverageIgnoreStart
+ return $bytes . ' byte' . ($bytes !== 1 ? 's' : '');
+ // @codeCoverageIgnoreEnd
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/Timer.php b/vendor/phpunit/php-timer/src/Timer.php
new file mode 100644
index 000000000..0917109be
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/Timer.php
@@ -0,0 +1,40 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function array_pop;
+use function hrtime;
+
+final class Timer
+{
+ /**
+ * @psalm-var list<float>
+ */
+ private $startTimes = [];
+
+ public function start(): void
+ {
+ $this->startTimes[] = (float) hrtime(true);
+ }
+
+ /**
+ * @throws NoActiveTimerException
+ */
+ public function stop(): Duration
+ {
+ if (empty($this->startTimes)) {
+ throw new NoActiveTimerException(
+ 'Timer::start() has to be called before Timer::stop()'
+ );
+ }
+
+ return Duration::fromNanoseconds((float) hrtime(true) - array_pop($this->startTimes));
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/Exception.php b/vendor/phpunit/php-timer/src/exceptions/Exception.php
new file mode 100644
index 000000000..996da0860
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/Exception.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use Throwable;
+
+interface Exception extends Throwable
+{
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php b/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php
new file mode 100644
index 000000000..40fe45e86
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use LogicException;
+
+final class NoActiveTimerException extends LogicException implements Exception
+{
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php b/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php
new file mode 100644
index 000000000..a2d94ce80
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use RuntimeException;
+
+final class TimeSinceStartOfRequestNotAvailableException extends RuntimeException implements Exception
+{
+}