parent
10f16726e0
commit
34e229e30b
4 changed files with 63 additions and 6 deletions
@ -0,0 +1,50 @@ |
|||||||
|
--TEST-- |
||||||
|
Runtime int division preserves PHP exact, fractional, overflow and zero-divisor semantics |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
function divide(int $left, int $right): mixed |
||||||
|
{ |
||||||
|
return $left / $right; |
||||||
|
} |
||||||
|
|
||||||
|
function divide_assign(int $left, int $right): mixed |
||||||
|
{ |
||||||
|
$result = $left; |
||||||
|
$result /= $right; |
||||||
|
return $result; |
||||||
|
} |
||||||
|
|
||||||
|
function main(): void |
||||||
|
{ |
||||||
|
var_dump(divide(12, 3)); |
||||||
|
var_dump(divide(10, 4)); |
||||||
|
var_dump(divide(PHP_INT_MIN, -1)); |
||||||
|
|
||||||
|
var_dump(divide_assign(12, 3)); |
||||||
|
var_dump(divide_assign(10, 4)); |
||||||
|
var_dump(divide_assign(PHP_INT_MIN, -1)); |
||||||
|
|
||||||
|
try { |
||||||
|
divide(10, 0); |
||||||
|
} catch (DivisionByZeroError $error) { |
||||||
|
echo "divide by zero\n"; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
divide_assign(10, 0); |
||||||
|
} catch (DivisionByZeroError $error) { |
||||||
|
echo "divide assign by zero\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(4) |
||||||
|
float(2.5) |
||||||
|
float(9.223372036854776E+18) |
||||||
|
int(4) |
||||||
|
float(2.5) |
||||||
|
float(9.223372036854776E+18) |
||||||
|
divide by zero |
||||||
|
divide assign by zero |
||||||
Loading…
Reference in new issue