1
0
mirror of https://github.com/php/php-src.git synced 2026-04-27 10:16:41 +02:00
Files
archived-php-src/ext/standard/tests/strings/str_increment_polyfill.phpt
T
George Peter Banyard d8696f9216 [RFC] Path to Saner Increment/Decrement operators (#10358)
* 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>
2023-07-17 15:51:24 +01:00

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