2015-03-06 23:28:12 +00:00
|
|
|
--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)
|
2015-05-17 16:35:18 +00:00
|
|
|
Exception in %s:%d
|
2015-03-06 23:28:12 +00:00
|
|
|
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}
|
2015-05-17 16:35:18 +00:00
|
|
|
ClosedGeneratorException: Generator yielded from aborted, no return value available in %s:%d
|
2015-03-06 23:28:12 +00:00
|
|
|
Stack trace:
|
|
|
|
#0 [internal function]: gen(Object(Generator), 1)
|
|
|
|
#1 %s(%d): Generator->current()
|
|
|
|
#2 {main}
|
|
|
|
|