@@ -152,22 +152,20 @@ public function testScheduledItemsFromOutsideOfSchedulerDontCreateExtraTimers()
152
152
});
153
153
});
154
154
155
- $ scheduler ->schedule (function () {}, 20 );
155
+ $ scheduler ->schedule (function () {}, 40 );
156
156
157
- $ scheduler ->schedule (function () {}, 15 )->dispose ();
158
- $ scheduler ->schedule (function () {}, 14 )->dispose ();
159
- $ scheduler ->schedule (function () {}, 13 )->dispose ();
160
- $ scheduler ->schedule (function () {}, 12 )->dispose ();
157
+ $ scheduler ->schedule (function () {}, 35 )->dispose ();
158
+ $ scheduler ->schedule (function () {}, 34 )->dispose ();
161
159
162
- $ scheduler ->schedule (function () {}, 10 );
160
+ $ scheduler ->schedule (function () {}, 20 );
163
161
164
162
$ loop ->run ();
165
163
166
- $ this ->assertEquals ( $ timersCreated , 3 );
167
- $ this ->assertEquals ( $ timersExecuted , 3 );
164
+ $ this ->assertLessThanOrEqual ( 3 , $ timersCreated );
165
+ $ this ->assertLessThanOrEqual ( 3 , $ timersExecuted );
168
166
}
169
167
170
- public function testMultipleSchedulersFromOutsideInSameTickDontCreateExtraTimers ()
168
+ public function testMultipleSchedulesFromOutsideInSameTickDontCreateExtraTimers ()
171
169
{
172
170
$ timersCreated = 0 ;
173
171
$ timersExecuted = 0 ;
@@ -190,13 +188,13 @@ public function testMultipleSchedulersFromOutsideInSameTickDontCreateExtraTimers
190
188
$ scheduler ->schedule (function () {}, 25 )->dispose ();
191
189
$ scheduler ->schedule (function () {}, 24 )->dispose ();
192
190
$ scheduler ->schedule (function () {}, 23 )->dispose ();
193
- $ scheduler ->schedule (function () {}, 22 )->dispose ();
191
+ $ scheduler ->schedule (function () {}, 25 )->dispose ();
194
192
});
195
193
196
194
$ loop ->run ();
197
195
198
- $ this ->assertEquals ($ timersCreated , 3 );
199
- $ this ->assertEquals ($ timersExecuted , 3 );
196
+ $ this ->assertEquals (3 , $ timersCreated );
197
+ $ this ->assertEquals (3 , $ timersExecuted );
200
198
}
201
199
202
200
public function testThatStuffScheduledWayInTheFutureDoesntKeepTheLoopRunningIfDisposed ()
@@ -244,4 +242,23 @@ public function testThatDisposalOfSingleScheduledItemOutsideOfInvokeCancelsTimer
244
242
245
243
$ this ->assertLessThan (2 , $ endTime - $ startTime );
246
244
}
245
+
246
+ public function testScheduledItemPastNextScheduledItemKillsItOwnTimerIfItBecomesTheNextOneAndIsDisposed ()
247
+ {
248
+ $ loop = Factory::create ();
249
+ $ scheduler = new EventLoopScheduler ($ loop );
250
+
251
+ $ startTime = microtime (true );
252
+
253
+ $ scheduler ->schedule (function () {}, 30 );
254
+ $ disp = $ scheduler ->schedule (function () {}, 3000 );
255
+ $ loop ->addTimer (0.050 , function () use ($ disp ) {
256
+ $ disp ->dispose ();
257
+ });
258
+
259
+ $ loop ->run ();
260
+ $ endTime = microtime (true );
261
+
262
+ $ this ->assertLessThan (2 , $ endTime - $ startTime );
263
+ }
247
264
}
0 commit comments