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.
80 lines
1.4 KiB
80 lines
1.4 KiB
--TEST--
|
|
Generators - Yield keyword and generator functions
|
|
--FILE--
|
|
<?php
|
|
// Test basic generator
|
|
function range_generator($start, $end) {
|
|
for ($i = $start; $i <= $end; $i++) {
|
|
yield $i;
|
|
}
|
|
}
|
|
|
|
// Test generator with keys
|
|
function keyed_generator() {
|
|
yield 'a' => 1;
|
|
yield 'b' => 2;
|
|
yield 'c' => 3;
|
|
}
|
|
|
|
// Test infinite generator
|
|
function infinite_sequence() {
|
|
$i = 1;
|
|
while (true) {
|
|
yield $i++;
|
|
if ($i > 5) break;
|
|
}
|
|
}
|
|
|
|
function main() {
|
|
// Test basic generator
|
|
echo "Basic generator:\n";
|
|
foreach (range_generator(1, 5) as $num) {
|
|
var_dump($num);
|
|
}
|
|
|
|
// Test keyed generator
|
|
echo "\nKeyed generator:\n";
|
|
foreach (keyed_generator() as $key => $value) {
|
|
echo $key . ": ";
|
|
var_dump($value);
|
|
}
|
|
|
|
// Test limited infinite generator
|
|
echo "\nInfinite sequence (limited):\n";
|
|
foreach (infinite_sequence() as $num) {
|
|
var_dump($num);
|
|
}
|
|
|
|
// Test generator object
|
|
$gen = range_generator(10, 12);
|
|
var_dump($gen->valid());
|
|
$gen->rewind();
|
|
var_dump($gen->valid());
|
|
var_dump($gen->current());
|
|
$gen->next();
|
|
var_dump($gen->current());
|
|
}
|
|
?>
|
|
--EXPECT--
|
|
Basic generator:
|
|
int(1)
|
|
int(2)
|
|
int(3)
|
|
int(4)
|
|
int(5)
|
|
|
|
Keyed generator:
|
|
a: int(1)
|
|
b: int(2)
|
|
c: int(3)
|
|
|
|
Infinite sequence (limited):
|
|
int(1)
|
|
int(2)
|
|
int(3)
|
|
int(4)
|
|
int(5)
|
|
bool(true)
|
|
bool(true)
|
|
int(10)
|
|
int(11)
|
|
|