TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
2.9 KiB
138 lines
2.9 KiB
--TEST--
|
|
Test sprintf() function : Rope Optimization for '%d'.
|
|
--SKIPIF--
|
|
<?php
|
|
echo 'skip AOT limitation';
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
function func($num) {
|
|
return $num + 1;
|
|
}
|
|
function sideeffect() {
|
|
echo "Called!\n";
|
|
return "foo";
|
|
}
|
|
class Foo {
|
|
public function __construct() {
|
|
echo "Called\n";
|
|
}
|
|
}
|
|
|
|
$a = 42;
|
|
$b = -1337;
|
|
$c = 3.14;
|
|
$d = new stdClass();
|
|
|
|
try {
|
|
var_dump(sprintf("%d", $a));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d", $a, $b));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d/%d", $a, $b, $c));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d/%d/%d", $a, $b, $c, $d));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/", func(0)));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("/%d", func(0)));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("/%d/", func(0)));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d/%d/%d", $a, $b, func(0), $a));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d/%d/%d", __FILE__, __LINE__, 1, M_PI));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d/%d", new Foo(), new Foo(), new Foo(), ));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf('%d/%d/%d', [], [], []));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
if (PHP_INT_SIZE == 8) {
|
|
var_dump(sprintf('%d/%d/%d', PHP_INT_MAX, 0, PHP_INT_MIN));
|
|
var_dump("2147483647/0/-2147483648");
|
|
} else {
|
|
var_dump("9223372036854775807/0/-9223372036854775808");
|
|
var_dump(sprintf('%d/%d/%d', PHP_INT_MAX, 0, PHP_INT_MIN));
|
|
}
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf('%d/%d/%d', true, false, true));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d/%d", true, 'foo'));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
try {
|
|
var_dump(sprintf("%d", 'foo'));
|
|
} catch (\Throwable $e) {echo $e, PHP_EOL; } echo PHP_EOL;
|
|
|
|
echo "Done";
|
|
?>
|
|
--EXPECTF--
|
|
string(2) "42"
|
|
|
|
string(8) "42/-1337"
|
|
|
|
string(10) "42/-1337/3"
|
|
|
|
|
|
Warning: Object of class stdClass could not be converted to int in %s on line 33
|
|
string(12) "42/-1337/3/1"
|
|
|
|
string(2) "1/"
|
|
|
|
string(2) "/1"
|
|
|
|
string(3) "/1/"
|
|
|
|
string(13) "42/-1337/1/42"
|
|
|
|
string(8) "0/53/1/3"
|
|
|
|
Called
|
|
Called
|
|
Called
|
|
|
|
Warning: Object of class Foo could not be converted to int in %s on line 57
|
|
|
|
Warning: Object of class Foo could not be converted to int in %s on line 57
|
|
|
|
Warning: Object of class Foo could not be converted to int in %s on line 57
|
|
string(5) "1/1/1"
|
|
|
|
string(5) "0/0/0"
|
|
|
|
string(42) "9223372036854775807/0/-9223372036854775808"
|
|
string(24) "2147483647/0/-2147483648"
|
|
|
|
string(5) "1/0/1"
|
|
|
|
string(3) "1/0"
|
|
|
|
string(1) "0"
|
|
|
|
Done
|
|
|