compileFixture(); self::assertStringContainsString('((php::Var(a)) / (php::Var(b)))', $code); self::assertStringNotContainsString('((a) / (b))', $code); } public function testTypedIntModuloRoutesThroughPhpMod(): void { $code = $this->compileFixture(); self::assertStringContainsString('php::fn::mod(a, b)', $code); self::assertStringNotContainsString('((a) % (b))', $code); } public function testTypedIntShiftsRouteThroughVariant(): void { $code = $this->compileFixture(); self::assertStringContainsString('((php::Var(a)) << (php::Var(b)))', $code); self::assertStringContainsString('((php::Var(a)) >> (php::Var(b)))', $code); self::assertStringNotContainsString('((a) << (b))', $code); self::assertStringNotContainsString('((a) >> (b))', $code); } private function compileFixture(): string { global $translator; $compiler = CompilerTest::create(TYPEPHP_ROOT_PATH); $translator = $compiler; $source = TYPEPHP_ROOT_PATH . '/phpunit/code/typed-scalar-arithmetic-codegen.php'; $compiler->addFiles([$source]); $compiler->prepareFile($source); $generated = $compiler->convertFile($source); $code = file_get_contents($generated); self::assertIsString($code); return $code; } }