mirror of
https://github.com/php/php-src.git
synced 2026-04-27 10:16:41 +02:00
d8696f9216
* Add behavioural tests for incdec operators * Add support to ++/-- for objects castable to _IS_NUMBER * Add str_increment() function * Add str_decrement() function RFC: https://wiki.php.net/rfc/saner-inc-dec-operators Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com> Co-authored-by: Arnaud Le Blanc <arnaud.lb@gmail.com>
60 lines
1.2 KiB
PHP
60 lines
1.2 KiB
PHP
--TEST--
|
|
Verifying that the str_increment() polyfill behaves the same
|
|
--FILE--
|
|
<?php
|
|
|
|
function polyfill(string $s): string {
|
|
if (is_numeric($s)) {
|
|
$offset = stripos($s, 'e');
|
|
if ($offset !== false) {
|
|
/* Using increment operator would cast the string to float
|
|
* Therefore we manually increment it to convert it to an "f"/"F" that doesn't get affected */
|
|
$c = $s[$offset];
|
|
$c++;
|
|
$s[$offset] = $c;
|
|
$s++;
|
|
$s[$offset] = match ($s[$offset]) {
|
|
'f' => 'e',
|
|
'F' => 'E',
|
|
'g' => 'f',
|
|
'G' => 'F',
|
|
};
|
|
return $s;
|
|
}
|
|
}
|
|
return ++$s;
|
|
}
|
|
|
|
$strictlyAlphaNumeric = [
|
|
"Az",
|
|
"aZ",
|
|
"A9",
|
|
"a9",
|
|
// Carrying values until the beginning of the string
|
|
"Zz",
|
|
"zZ",
|
|
"9z",
|
|
"9Z",
|
|
// string interpretable as a number in scientific notation
|
|
"5e6",
|
|
"5E6",
|
|
"5e9",
|
|
"5E9",
|
|
// Interned strings
|
|
"d",
|
|
"D",
|
|
"4",
|
|
];
|
|
|
|
foreach ($strictlyAlphaNumeric as $s) {
|
|
if (str_increment($s) !== polyfill($s)) {
|
|
var_dump("Error:", str_increment($s), polyfill($s));
|
|
}
|
|
}
|
|
|
|
echo "DONE";
|
|
|
|
?>
|
|
--EXPECT--
|
|
DONE
|