File tree 3 files changed +439
-11
lines changed
3 files changed +439
-11
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ A generator can be yielded from multiple times, testing immediate release of the yield from'ing generator
3
+ --FILE--
4
+ <?php
5
+
6
+ function gen () {
7
+ yield 42 ;
8
+ }
9
+ function yield_from ($ gen ) {
10
+ yield from $ gen ;
11
+ }
12
+ $ gen = gen ();
13
+ var_dump (yield_from ($ gen )->current ());
14
+ var_dump (yield_from ($ gen )->current ());
15
+
16
+ ?>
17
+ --EXPECT--
18
+ int(42)
19
+ int(42)
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ yield from on multiple trees needing merge, with intermediary nodes having only one child
3
+ --FILE--
4
+ <?php
5
+
6
+ function from ($ levels ) {
7
+ foreach (range (0 , 2 << $ levels ) as $ v ) {
8
+ yield $ v ;
9
+ }
10
+ }
11
+
12
+ function gen ($ gen , $ level ) {
13
+ yield from (function () use ($ gen ) { yield from $ gen ; })();
14
+ }
15
+
16
+ foreach (range (0 , 6 ) as $ levels ) {
17
+ print "$ levels level " .($ levels == 1 ? "" : "s " )."\n\n" ;
18
+
19
+ $ all = array ();
20
+ $ all [] = $ gens [0 ][0 ] = from ($ levels );
21
+
22
+ for ($ level = 1 ; $ level < $ levels ; $ level ++) {
23
+ for ($ i = 0 ; $ i < (1 << $ level ); $ i ++) {
24
+ $ all [] = $ gens [$ level ][$ i ] = gen ($ gens [$ level -1 ][$ i >> 1 ], $ level );
25
+ }
26
+ }
27
+
28
+ while (1 ) {
29
+ foreach ($ all as $ gen ) {
30
+ var_dump ($ gen ->current ());
31
+ $ gen ->next ();
32
+ if (!$ gen ->valid ()) {
33
+ break 2 ;
34
+ }
35
+ }
36
+ }
37
+
38
+ print "\n\n" ;
39
+ }
40
+ ?>
41
+ --EXPECT--
42
+ 0 levels
43
+
44
+ int(0)
45
+ int(1)
46
+ int(2)
47
+
48
+
49
+ 1 level
50
+
51
+ int(0)
52
+ int(1)
53
+ int(2)
54
+ int(3)
55
+ int(4)
56
+
57
+
58
+ 2 levels
59
+
60
+ int(0)
61
+ int(1)
62
+ int(2)
63
+ int(3)
64
+ int(4)
65
+ int(5)
66
+ int(6)
67
+ int(7)
68
+ int(8)
69
+
70
+
71
+ 3 levels
72
+
73
+ int(0)
74
+ int(1)
75
+ int(2)
76
+ int(3)
77
+ int(4)
78
+ int(5)
79
+ int(6)
80
+ int(7)
81
+ int(8)
82
+ int(9)
83
+ int(10)
84
+ int(11)
85
+ int(12)
86
+ int(13)
87
+ int(14)
88
+ int(15)
89
+ int(16)
90
+
91
+
92
+ 4 levels
93
+
94
+ int(0)
95
+ int(1)
96
+ int(2)
97
+ int(3)
98
+ int(4)
99
+ int(5)
100
+ int(6)
101
+ int(7)
102
+ int(8)
103
+ int(9)
104
+ int(10)
105
+ int(11)
106
+ int(12)
107
+ int(13)
108
+ int(14)
109
+ int(15)
110
+ int(16)
111
+ int(17)
112
+ int(18)
113
+ int(19)
114
+ int(20)
115
+ int(21)
116
+ int(22)
117
+ int(23)
118
+ int(24)
119
+ int(25)
120
+ int(26)
121
+ int(27)
122
+ int(28)
123
+ int(29)
124
+ int(30)
125
+ int(31)
126
+ int(32)
127
+
128
+
129
+ 5 levels
130
+
131
+ int(0)
132
+ int(1)
133
+ int(2)
134
+ int(3)
135
+ int(4)
136
+ int(5)
137
+ int(6)
138
+ int(7)
139
+ int(8)
140
+ int(9)
141
+ int(10)
142
+ int(11)
143
+ int(12)
144
+ int(13)
145
+ int(14)
146
+ int(15)
147
+ int(16)
148
+ int(17)
149
+ int(18)
150
+ int(19)
151
+ int(20)
152
+ int(21)
153
+ int(22)
154
+ int(23)
155
+ int(24)
156
+ int(25)
157
+ int(26)
158
+ int(27)
159
+ int(28)
160
+ int(29)
161
+ int(30)
162
+ int(31)
163
+ int(32)
164
+ int(33)
165
+ int(34)
166
+ int(35)
167
+ int(36)
168
+ int(37)
169
+ int(38)
170
+ int(39)
171
+ int(40)
172
+ int(41)
173
+ int(42)
174
+ int(43)
175
+ int(44)
176
+ int(45)
177
+ int(46)
178
+ int(47)
179
+ int(48)
180
+ int(49)
181
+ int(50)
182
+ int(51)
183
+ int(52)
184
+ int(53)
185
+ int(54)
186
+ int(55)
187
+ int(56)
188
+ int(57)
189
+ int(58)
190
+ int(59)
191
+ int(60)
192
+ int(61)
193
+ int(62)
194
+ int(63)
195
+ int(64)
196
+
197
+
198
+ 6 levels
199
+
200
+ int(0)
201
+ int(1)
202
+ int(2)
203
+ int(3)
204
+ int(4)
205
+ int(5)
206
+ int(6)
207
+ int(7)
208
+ int(8)
209
+ int(9)
210
+ int(10)
211
+ int(11)
212
+ int(12)
213
+ int(13)
214
+ int(14)
215
+ int(15)
216
+ int(16)
217
+ int(17)
218
+ int(18)
219
+ int(19)
220
+ int(20)
221
+ int(21)
222
+ int(22)
223
+ int(23)
224
+ int(24)
225
+ int(25)
226
+ int(26)
227
+ int(27)
228
+ int(28)
229
+ int(29)
230
+ int(30)
231
+ int(31)
232
+ int(32)
233
+ int(33)
234
+ int(34)
235
+ int(35)
236
+ int(36)
237
+ int(37)
238
+ int(38)
239
+ int(39)
240
+ int(40)
241
+ int(41)
242
+ int(42)
243
+ int(43)
244
+ int(44)
245
+ int(45)
246
+ int(46)
247
+ int(47)
248
+ int(48)
249
+ int(49)
250
+ int(50)
251
+ int(51)
252
+ int(52)
253
+ int(53)
254
+ int(54)
255
+ int(55)
256
+ int(56)
257
+ int(57)
258
+ int(58)
259
+ int(59)
260
+ int(60)
261
+ int(61)
262
+ int(62)
263
+ int(63)
264
+ int(64)
265
+ int(65)
266
+ int(66)
267
+ int(67)
268
+ int(68)
269
+ int(69)
270
+ int(70)
271
+ int(71)
272
+ int(72)
273
+ int(73)
274
+ int(74)
275
+ int(75)
276
+ int(76)
277
+ int(77)
278
+ int(78)
279
+ int(79)
280
+ int(80)
281
+ int(81)
282
+ int(82)
283
+ int(83)
284
+ int(84)
285
+ int(85)
286
+ int(86)
287
+ int(87)
288
+ int(88)
289
+ int(89)
290
+ int(90)
291
+ int(91)
292
+ int(92)
293
+ int(93)
294
+ int(94)
295
+ int(95)
296
+ int(96)
297
+ int(97)
298
+ int(98)
299
+ int(99)
300
+ int(100)
301
+ int(101)
302
+ int(102)
303
+ int(103)
304
+ int(104)
305
+ int(105)
306
+ int(106)
307
+ int(107)
308
+ int(108)
309
+ int(109)
310
+ int(110)
311
+ int(111)
312
+ int(112)
313
+ int(113)
314
+ int(114)
315
+ int(115)
316
+ int(116)
317
+ int(117)
318
+ int(118)
319
+ int(119)
320
+ int(120)
321
+ int(121)
322
+ int(122)
323
+ int(123)
324
+ int(124)
325
+ int(125)
326
+ int(126)
327
+ int(127)
328
+ int(128)
You can’t perform that action at this time.
0 commit comments