/** * @dataProvider subjectProvider * @covers ::getIterator */ public function test_forEach(testSubject $subject) { $idx = 0; $count = 0; /** @var testSubject $subjectKey Seriously phpstorm, you know this **face palm** */ $subjectKey = $subject->keys(); foreach ($subject as $key => $value) { self::assertSame($subjectKey($idx), $key); self::assertSame($subject($key), $value); $idx += 1; foreach ($subject as $k => $v) { $count += 1; } } self::assertEquals(count($subject), $idx); self::assertEquals(count($subject) ** 2, $count); }