101 lines
2.3 KiB
Python
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()
|