1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
--TEST--
Decimal::toInt
--SKIPIF--
<?php
if (!extension_loaded("decimal")) echo "skip";
?>
--FILE--
<?php
use Decimal\Decimal;
/**
* Shortcut to construct a new decimal.
*/
function decimal(...$args) { return new Decimal(...$args); }
$tests = [
["0", 0],
["-0.1", 0],
[ "0.1", 0],
["-2.4", -2],
["-2.5", -2],
["-2.6", -2],
[ "2.4", 2],
[ "2.5", 2],
[ "2.6", 2],
[ "1E-50", 0],
["-1E-50", 0],
[ "NAN", 0],
[ "INF", 0],
["-INF", 0],
["1E+1000", PHP_INT_MAX], // Exception
[PHP_INT_MAX, PHP_INT_MAX],
[PHP_INT_MIN, PHP_INT_MIN],
[(string) PHP_INT_MAX, PHP_INT_MAX],
[(string) PHP_INT_MIN, PHP_INT_MIN],
[PHP_INT_MAX + 1, null], // Exception
[PHP_INT_MIN - 1, null], // Exception
];
foreach ($tests as $test) {
$number = $test[0];
$expect = $test[1];
try {
$result = decimal($number)->toInt();
} catch (Throwable $e) {
printf("%s: %s\n", get_class($e), $e->getMessage());
continue;
}
if ($result !== $expect) {
print_r(compact("number", "result", "expect"));
}
}
/* Test that toint does not modify the original */
$number = decimal("2.5");
$result = $number->toInt();
if ((string) $number !== "2.5") {
var_dump("Mutated!", compact("number"));
}
?>
--EXPECT--
RuntimeException: Converting NaN or Inf to integer is not defined
RuntimeException: Converting NaN or Inf to integer is not defined
RuntimeException: Converting NaN or Inf to integer is not defined
OverflowException: Integer overflow
TypeError: Decimal\Decimal::__construct() expected parameter 1 to be a string, integer, or decimal, float given
TypeError: Decimal\Decimal::__construct() expected parameter 1 to be a string, integer, or decimal, float given
|