Skip to content

Commit

Permalink
Adjust code to PHP 8.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dazet committed Feb 26, 2023
1 parent e8373de commit d6dbcc3
Show file tree
Hide file tree
Showing 33 changed files with 1,039 additions and 213 deletions.
875 changes: 866 additions & 9 deletions docs/examples.md

Large diffs are not rendered by default.

7 changes: 0 additions & 7 deletions spec/PlainNumberSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,6 @@ function it_can_be_created_from_float()
$this->toNumber()->shouldBe(123.66);
}

function it_can_be_created_from_numeric_string()
{
$this->beConstructedThrough('from', ['123.66']);

$this->toNumber()->shouldBe(123.66);
}

function it_compares_int_with_numbers_just_like_scalars()
{
$this->beConstructedWith(new JustInteger(123));
Expand Down
30 changes: 15 additions & 15 deletions src/NumberValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,44 @@ interface NumberValue extends Value, Numberable
// comparators

/**
* @param int|float|numeric-string|Numberable $other
* @return int {-1, 0, 1}
* @param float|int|numeric-string|Numberable $other
* @return int<-1,1>
*/
public function compare($other): int;
public function compare(float|int|string|Numberable $other): int;

/**
* @param int|float|numeric-string|Numberable $other
* @param float|int|numeric-string|Numberable $other
*/
public function equals($other): bool;
public function equals(float|int|string|Numberable $other): bool;

// basic math

/**
* @param int|float|numeric-string|Numberable $other
* @param float|int|numeric-string|Numberable $other
*/
public function add($other): NumberValue;
public function add(float|int|string|Numberable $other): NumberValue;

/**
* @param int|float|numeric-string|Numberable $other
* @param float|int|numeric-string|Numberable $other
*/
public function subtract($other): NumberValue;
public function subtract(float|int|string|Numberable $other): NumberValue;

/**
* @param int|float|numeric-string|Numberable $other
* @param float|int|numeric-string|Numberable $other
*/
public function multiply($other): NumberValue;
public function multiply(float|int|string|Numberable $other): NumberValue;

/**
* @param int|float|numeric-string|Numberable $other
* @param float|int|numeric-string|Numberable $other
*/
public function divide($other): NumberValue;
public function divide(float|int|string|Numberable $other): NumberValue;

public function abs(): NumberValue;

/**
* @param int|float|numeric-string|Numberable $divider
* @param float|int|numeric-string|Numberable $divider
*/
public function modulo($divider): NumberValue;
public function modulo(float|int|string|Numberable $divider): NumberValue;

// rounding

Expand Down
5 changes: 1 addition & 4 deletions src/Numberable.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,5 @@

interface Numberable
{
/**
* @return int|float
*/
public function toNumber();
public function toNumber(): float|int;
}
11 changes: 4 additions & 7 deletions src/Numberable/Absolute.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,12 @@

final class Absolute implements Numberable
{
private Numberable $numberable;

public function __construct(Numberable $numberable)
{
$this->numberable = $numberable;
public function __construct(
private Numberable $numberable,
) {
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
return abs($this->numberable->toNumber());
}
Expand Down
14 changes: 5 additions & 9 deletions src/Numberable/Add.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,13 @@

final class Add implements Numberable
{
private Numberable $leftTerm;
private Numberable $rightTerm;

public function __construct(Numberable $leftTerm, Numberable $rightTerm)
{
$this->leftTerm = $leftTerm;
$this->rightTerm = $rightTerm;
public function __construct(
private Numberable $leftTerm,
private Numberable $rightTerm,
) {
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
return $this->leftTerm->toNumber() + $this->rightTerm->toNumber();
}
Expand Down
14 changes: 5 additions & 9 deletions src/Numberable/Average.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,13 @@

final class Average implements Numberable
{
/** @var Arrayable<Numberable> */
private Arrayable $terms;

/** @param Arrayable<Numberable> $terms */
public function __construct(Arrayable $terms)
{
$this->terms = $terms;
public function __construct(
/** @var Arrayable<Numberable> */
private Arrayable $terms,
) {
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
$terms = $this->terms->toArray();
$count = count($terms);
Expand Down
11 changes: 5 additions & 6 deletions src/Numberable/Calculate.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,18 @@

final class Calculate implements Numberable
{
private Numberable $numberable;
/** @var callable(int|float):(int|float|Numberable) */
private $formula;

/** @param callable(int|float):(int|float|Numberable) $formula */
public function __construct(Numberable $numberable, callable $formula)
{
$this->numberable = $numberable;
public function __construct(
private Numberable $numberable,
callable $formula,
) {
$this->formula = $formula;
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
$result = ($this->formula)($this->numberable->toNumber());

Expand Down
8 changes: 3 additions & 5 deletions src/Numberable/Ceil.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@

final class Ceil implements Numberable
{
private Numberable $numberable;

public function __construct(Numberable $numberable)
{
$this->numberable = $numberable;
public function __construct(
private Numberable $numberable,
) {
}

public function toNumber(): float
Expand Down
8 changes: 3 additions & 5 deletions src/Numberable/CompareAsInt.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@

final class CompareAsInt
{
private int $direction;

private function __construct(int $direction)
{
$this->direction = $direction;
private function __construct(
private int $direction,
) {
}

public static function asc(): self
Expand Down
14 changes: 5 additions & 9 deletions src/Numberable/Divide.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,13 @@

final class Divide implements Numberable
{
private Numberable $dividend;
private Numberable $divisor;

public function __construct(Numberable $dividend, Numberable $divisor)
{
$this->dividend = $dividend;
$this->divisor = $divisor;
public function __construct(
private Numberable $dividend,
private Numberable $divisor,
) {
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
$divisor = $this->divisor->toNumber();

Expand Down
8 changes: 3 additions & 5 deletions src/Numberable/Floor.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@

final class Floor implements Numberable
{
private Numberable $numberable;

public function __construct(Numberable $numberable)
{
$this->numberable = $numberable;
public function __construct(
private Numberable $numberable,
) {
}

public function toNumber(): float
Expand Down
8 changes: 3 additions & 5 deletions src/Numberable/JustFloat.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@

final class JustFloat implements Numberable
{
private float $float;

public function __construct(float $float)
{
$this->float = $float;
public function __construct(
private float $float,
) {
}

public function toNumber(): float
Expand Down
8 changes: 3 additions & 5 deletions src/Numberable/JustInteger.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@

final class JustInteger implements Numberable
{
private int $integer;

public function __construct(int $integer)
{
$this->integer = $integer;
public function __construct(
private int $integer,
) {
}

public function toNumber(): int
Expand Down
28 changes: 16 additions & 12 deletions src/Numberable/JustNumber.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,30 @@
namespace GW\Value\Numberable;

use GW\Value\Numberable;
use function is_string;

final class JustNumber implements Numberable
{
/** @var int|float */
private $number;

/** @param int|float|numeric-string $number */
public function __construct($number)
{
$this->number = $number + 0;
public function __construct(
private float|int $number,
) {
}

/** @param int|float|numeric-string|Numberable $number */
public static function wrap($number): Numberable
/** @param float|int|numeric-string|Numberable $number */
public static function wrap(float|int|string|Numberable $number): Numberable
{
return $number instanceof Numberable ? $number : new self($number);
if (is_string($number)) {
return new NumericString($number);
}

if ($number instanceof Numberable) {
return $number;
}

return new self($number);
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
return $this->number;
}
Expand Down
4 changes: 2 additions & 2 deletions src/Numberable/JustNumbers.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ final class JustNumbers implements Arrayable
/** @var Arrayable<Numberable> */
private Arrayable $numbers;

/** @param int|float|numeric-string|Numberable ...$numbers */
public function __construct(...$numbers)
/** @param float|int|numeric-string|Numberable ...$numbers */
public function __construct(float|int|string|Numberable ...$numbers)
{
$this->numbers = new Map(new JustArray($numbers), new ToNumberable());
}
Expand Down
3 changes: 1 addition & 2 deletions src/Numberable/Max.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public function __construct(Arrayable $numbers)
$this->numbers = new Map($numbers, new ToScalarNumber());
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
$numbers = $this->numbers->toArray();
if (count($numbers) === 0) {
Expand Down
3 changes: 1 addition & 2 deletions src/Numberable/Min.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ public function __construct(Arrayable $numbers)
$this->numbers = new Map($numbers, new ToScalarNumber());
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
$numbers = $this->numbers->toArray();
if (count($numbers) === 0) {
Expand Down
11 changes: 4 additions & 7 deletions src/Numberable/Modulo.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,10 @@

final class Modulo implements Numberable
{
private Numberable $dividend;
private Numberable $divisor;

public function __construct(Numberable $dividend, Numberable $divisor)
{
$this->dividend = $dividend;
$this->divisor = $divisor;
public function __construct(
private Numberable $dividend,
private Numberable $divisor,
) {
}

public function toNumber(): int
Expand Down
14 changes: 5 additions & 9 deletions src/Numberable/Multiply.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,13 @@

final class Multiply implements Numberable
{
private Numberable $right;
private Numberable $left;

public function __construct(Numberable $left, Numberable $right)
{
$this->left = $left;
$this->right = $right;
public function __construct(
private Numberable $left,
private Numberable $right,
) {
}

/** @return int|float */
public function toNumber()
public function toNumber(): float|int
{
return $this->left->toNumber() * $this->right->toNumber();
}
Expand Down
4 changes: 2 additions & 2 deletions src/Numberable/NumberValues.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ final class NumberValues implements Arrayable
/** @var Arrayable<NumberValue> */
private Arrayable $numbers;

/** @param int|float|numeric-string|Numberable ...$numbers */
public function __construct(...$numbers)
/** @param float|int|numeric-string|Numberable ...$numbers */
public function __construct(float|int|string|Numberable ...$numbers)
{
$this->numbers = new Map(new JustArray($numbers), new ToNumberValue());
}
Expand Down
Loading

0 comments on commit d6dbcc3

Please sign in to comment.