setAccessible(true); return $m->invoke(null, ...$args); } // ── parseFrameRate (label768/780/1047/1052/1057) ─────────── public function testPlainInteger(): void { $this->assertSame(30.0, $this->call('parseFrameRate', '30')); $this->assertSame(25.0, $this->call('parseFrameRate', 25)); } public function testRationalFrameRate(): void { $this->assertSame(25.0, $this->call('parseFrameRate', '25/1')); $this->assertEqualsWithDelta(29.97, $this->call('parseFrameRate', '30000/1001'), 0.001); } public function testZeroAndMalformedAreZero(): void { $this->assertSame(0.0, $this->call('parseFrameRate', '')); $this->assertSame(0.0, $this->call('parseFrameRate', '0')); $this->assertSame(0.0, $this->call('parseFrameRate', '0/0'), 'division-by-zero guarded'); $this->assertSame(0.0, $this->call('parseFrameRate', '30/0'), 'zero denominator guarded'); } }