public function map_with_index_dispose_inside_selector()
{
$xs = $this->createHotObservable([onNext(100, 4), onNext(200, 3), onNext(500, 2), onNext(600, 1)]);
$invoked = 0;
$results = $this->scheduler->createObserver();
$d = new SerialDisposable();
$d->setDisposable($xs->mapWithIndex(function ($index, $x) use(&$invoked, $d) {
$invoked++;
if ($this->scheduler->getClock() > 400) {
$d->dispose();
}
return $x + $index * 10;
})->subscribe($results));
$this->scheduler->scheduleAbsolute(TestScheduler::DISPOSED, function () use($d) {
$d->dispose();
});
$this->scheduler->start();
$this->assertMessages([onNext(100, 4), onNext(200, 13)], $results->getMessages());
$this->assertSubscriptions([subscribe(0, 500)], $xs->getSubscriptions());
$this->assertEquals(3, $invoked);
}