private function runMapTest(array $originalData, $subject, \Closure $callback)
{
$iterator = new MapIterator($subject, $callback);
$this->assertSame(count($originalData), count($iterator));
foreach ($iterator as $key => $value) {
$this->assertArrayHasKey($key, $originalData);
$this->assertSame($callback($originalData[$key]), $value);
}
$iterator->seek(5);
$this->assertSame($callback($originalData[5]), $iterator->current());
$this->assertSame(array_map($callback, $originalData), $iterator->toArray());
if (is_array($subject)) {
$this->assertInstanceOf(\ArrayIterator::class, $iterator->getInnerIterator());
} elseif ($subject instanceof \IteratorAggregate) {
$this->assertInstanceOf(get_class($subject->getIterator()), $iterator->getInnerIterator());
} else {
$this->assertInstanceOf(get_class($subject), $iterator->getInnerIterator());
}
}