1
0
mirror of https://github.com/php/php-src.git synced 2026-04-19 05:51:02 +02:00
Files
archived-php-src/ext/gmp/tests/overloading.phpt
datibbaw aff56f3c45 add T_POW (**) operator
Fixed recognition of the operator

Added opcode, still doing multiply instead of pow()

opcode now always returns int(42)

The right answer, but always a float

Yanked code from pow() implementation.

Should not handle negative long as exponent ourselves

Added test cases from pow()

Moved precedence higher than '~'

Added GMP operator overloading

Added ZEND_ASSIGN_POW (**=) operator.

Added pow() as a language construct.

Adjusted test cases for changed precedence.

Reduced pow() to shell function around ZEND_API pow_function()

Reduced test case to only contain edge cases
Added overloading test case

Moved unary minus above T_POW

Revert "Added pow() as a language construct."

Bad bad bad idea.

This reverts commit f60b98cf7a8371233d800a6faa286ddba4432d02.

Reverted unary minus behaviour due to previous revert.
Convert arrays to int(0)
Exponent with array as a base becomes int(0)

Rebase against master

Fixed tokenizer test case
2014-02-06 14:41:21 +01:00

267 lines
3.6 KiB
PHP

--TEST--
GMP operator overloading
--SKIPIF--
<?php if (!extension_loaded("gmp")) print "skip"; ?>
--FILE--
<?php
$a = gmp_init(42);
$b = gmp_init(17);
var_dump($a + $b);
var_dump($a + 17);
var_dump(42 + $b);
var_dump($a - $b);
var_dump($a - 17);
var_dump(42 - $b);
var_dump($a / $b);
var_dump($a / 17);
var_dump(42 / $b);
var_dump($a / 0);
var_dump($a % $b);
var_dump($a % 17);
var_dump(42 % $b);
var_dump($a % 0);
// sl, sr
var_dump($a | $b);
var_dump($a | 17);
var_dump(42 | $b);
var_dump($a & $b);
var_dump($a & 17);
var_dump(42 & $b);
var_dump($a ^ $b);
var_dump($a ^ 17);
var_dump(42 ^ $b);
var_dump($a << $b);
var_dump($a << 17);
var_dump(42 << $b);
var_dump($a >> 2);
var_dump(-$a >> 2);
var_dump(~$a);
var_dump(-$a);
var_dump(+$a);
var_dump($a == $b);
var_dump($a != $b);
var_dump($a < $b);
var_dump($a <= $b);
var_dump($a > $b);
var_dump($a >= $b);
var_dump($a == $a);
var_dump($a != $a);
var_dump($a == 42);
var_dump($a != 42);
var_dump($a < 42);
var_dump($a <= 42);
var_dump($a > 42);
var_dump($a >= 42);
var_dump($a == new stdClass);
$a += 1;
var_dump($a);
$a -= 1;
var_dump($a);
var_dump(++$a);
var_dump($a++);
var_dump($a);
var_dump(--$a);
var_dump($a--);
var_dump($a);
$x = gmp_init(3);
$y = gmp_init(2);
var_dump($x ** $y);
?>
--EXPECTF--
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "25"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "25"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "25"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "2"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "2"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "2"
}
Warning: main(): Zero operand not allowed in %s on line %d
bool(false)
object(GMP)#%d (1) {
["num"]=>
string(1) "8"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "8"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "8"
}
Warning: main(): Zero operand not allowed in %s on line %d
bool(false)
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "0"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "0"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "0"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "59"
}
object(GMP)#%d (1) {
["num"]=>
string(7) "5505024"
}
object(GMP)#%d (1) {
["num"]=>
string(7) "5505024"
}
object(GMP)#%d (1) {
["num"]=>
string(7) "5505024"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "10"
}
object(GMP)#%d (1) {
["num"]=>
string(3) "-11"
}
object(GMP)#%d (1) {
["num"]=>
string(3) "-43"
}
object(GMP)#%d (1) {
["num"]=>
string(3) "-42"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "42"
}
bool(false)
bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
Warning: main(): Unable to convert variable to GMP - wrong type in %s on line %d
bool(false)
object(GMP)#%d (1) {
["num"]=>
string(2) "43"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "42"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "43"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "43"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "44"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "43"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "43"
}
object(GMP)#%d (1) {
["num"]=>
string(2) "42"
}
object(GMP)#%d (1) {
["num"]=>
string(1) "9"
}