import time import subprocess class SpeedTest: def __init__( self, size: int = 128, depth: int = 8, g2: float = 1.0, g3: float = 0.0, ) -> None: self.size = size self.depth = depth self.g2 = g2 self.g3 = g3 def rust(self): def runner(): cmd = [ "./main-rs", "--size", str(self.size), "--depth", str(self.depth), "-g2", str(self.g2), "-g3", str(self.g3), ] result = self._runner(cmd) cmd = ["rm", "main-rs"] self._runner(cmd) return result cmd = ["rustc", "main.rs", "-o", "main-rs"] self._runner(cmd) return runner def golang(self): def runner(): cmd = [ "./main-go", "--size", str(self.size), "--depth", str(self.depth), "-g2", str(self.g2), "-g3", str(self.g3), ] result = self._runner(cmd) cmd = ["rm", "main-go"] self._runner(cmd) return result cmd = ["go", "build", "-o", "main-go", "main.go"] self._runner(cmd) return runner def python(self): def runner(): cmd = [ "python3", "./main.py", "--size", str(self.size), "--depth", str(self.depth), "-g2", str(self.g2), "-g3", str(self.g3), ] return self._runner(cmd) return runner def _runner(self, cmd: list[str]): return subprocess.run(cmd, text=True, capture_output=True).stdout.strip() def timer(func): start = time.time() r = func() print(len(r)) end = time.time() return end - start def main(): speedtest = SpeedTest(1000) print("python", timer(speedtest.python())) print("golang", timer(speedtest.golang())) print("rust", timer(speedtest.rust())) if __name__ == "__main__": main()