mirror of
https://github.com/php/php-src.git
synced 2025-08-20 09:24:05 +02:00

This patch adds missing newlines, trims multiple redundant final newlines into a single one, and trims redundant leading newlines in all *.phpt sections. According to POSIX, a line is a sequence of zero or more non-' <newline>' characters plus a terminating '<newline>' character. [1] Files should normally have at least one final newline character. C89 [2] and later standards [3] mention a final newline: "A source file that is not empty shall end in a new-line character, which shall not be immediately preceded by a backslash character." Although it is not mandatory for all files to have a final newline fixed, a more consistent and homogeneous approach brings less of commit differences issues and a better development experience in certain text editors and IDEs. [1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206 [2] https://port70.net/~nsz/c/c89/c89-draft.html#2.1.1.2 [3] https://port70.net/~nsz/c/c99/n1256.html#5.1.1.2
77 lines
1.3 KiB
PHP
77 lines
1.3 KiB
PHP
--TEST--
|
|
yield from on multiple trees needing merge
|
|
--FILE--
|
|
<?php
|
|
|
|
function from($levels) {
|
|
foreach (range(0, 2 << $levels) as $v) {
|
|
yield $v;
|
|
if ($v == (1 << ($levels - 1)) - 2) {
|
|
throw new Exception();
|
|
}
|
|
}
|
|
}
|
|
|
|
function gen($gen, $level) {
|
|
yield from $gen;
|
|
}
|
|
|
|
$levels = 5;
|
|
|
|
print "$levels levels\n\n";
|
|
|
|
$all = array();
|
|
$all[] = $gens[0][0] = from($levels);
|
|
|
|
for ($level = 1; $level < $levels; $level++) {
|
|
for ($i = 0; $i < (1 << $level); $i++) {
|
|
$all[] = $gens[$level][$i] = gen($gens[$level-1][$i >> 1], $level);
|
|
}
|
|
}
|
|
|
|
for ($i = 0; $i < 2; $i++) {
|
|
try {
|
|
foreach ($all as $gen) {
|
|
var_dump($gen->current());
|
|
$gen->next();
|
|
if (!$gen->valid()) {
|
|
break;
|
|
}
|
|
}
|
|
} catch(Exception $e) {
|
|
print "$e\n";
|
|
unset($all[array_search($gen, $all)]);
|
|
}
|
|
}
|
|
?>
|
|
--EXPECTF--
|
|
5 levels
|
|
|
|
int(0)
|
|
int(1)
|
|
int(2)
|
|
int(3)
|
|
int(4)
|
|
int(5)
|
|
int(6)
|
|
int(7)
|
|
int(8)
|
|
int(9)
|
|
int(10)
|
|
int(11)
|
|
int(12)
|
|
int(13)
|
|
int(14)
|
|
Exception in %s:%d
|
|
Stack trace:
|
|
#0 %s(%d): from(5)
|
|
#1 %s(%d): gen(Object(Generator), 1)
|
|
#2 %s(%d): gen(Object(Generator), 2)
|
|
#3 [internal function]: gen(Object(Generator), 3)
|
|
#4 %s(%d): Generator->next()
|
|
#5 {main}
|
|
ClosedGeneratorException: Generator yielded from aborted, no return value available in %s:%d
|
|
Stack trace:
|
|
#0 [internal function]: gen(Object(Generator), 1)
|
|
#1 %s(%d): Generator->current()
|
|
#2 {main}
|