Files
fractal-poincare/speedtest.py
2025-09-15 12:30:20 +05:00

101 lines
2.3 KiB
Python

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()