summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-timer/src/Duration.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-timer/src/Duration.php')
-rw-r--r--vendor/phpunit/php-timer/src/Duration.php109
1 files changed, 109 insertions, 0 deletions
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;
+ }
+}