Commit e34f878e authored by Michael Krause's avatar Michael Krause 🎉

Merge branch 'master' of git.mpib-berlin.mpg.de:krause/burnpy

parents 4d2be328 737547d0
Pipeline #5680 failed with stage
in 1 minute and 26 seconds
image: docker
services:
- docker:dind
variables:
CONTAINER_RELEASE_IMAGE: registry.git.mpib-berlin.mpg.de/krause/burnpy:latest
stages:
- test
- build
test:
image: python:latest
script:
- python test.py
build:
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.git.mpib-berlin.mpg.de
- docker build -t $CONTAINER_RELEASE_IMAGE .
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master
FROM python:alpine
COPY burn.py /bin/
ENTRYPOINT ["/bin/burn.py"]
......@@ -4,7 +4,7 @@ import sys
import os
from socket import gethostname
from math import floor, log10
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor, as_completed
def main():
......@@ -19,6 +19,7 @@ def main():
sysinfo()
burn(n, threads)
def help():
print("Single core burner computing fib(n) recursively.")
print(" Usage: {} <hours> [number of threads]".format(sys.argv[0]))
......@@ -46,7 +47,8 @@ def burn(hours, threads):
10**(1 - n*log10(1.618)) = c
"""
# c is the characteristic speed of this cpu and I measured time(fib(36)) = 10s
# c is the characteristic speed of this cpu
# and I measured time(fib(36)) = 10s
c = 10**(1 - 36*log10(1.618))
n = log10(hours*3600/c)/log10(1.618)
n = int(floor(n))
......@@ -54,7 +56,8 @@ def burn(hours, threads):
with ProcessPoolExecutor(max_workers=threads) as pool:
futures = {pool.submit(fib, n) for i in range(threads)}
for index, future in enumerate(as_completed(futures)):
print("(thread {}) fib({}) = {} , congrats.".format(index, n, future.result()))
print("(thread {}) fib({}) = "
"{} , congrats.".format(index, n, future.result()))
def fib(n):
......@@ -63,5 +66,6 @@ def fib(n):
else:
return fib(n-1) + fib(n-2)
if __name__ == '__main__':
main()
import unittest
import time
from burn import fib
class TestFib(unittest.TestCase):
def test_fib(self):
"""
Test fib()
"""
self.assertEqual(fib(0), 1)
self.assertEqual(fib(1), 1)
self.assertEqual(fib(5), 8)
def test_slowness(self):
"""
Verify fib() is super slow
"""
start = time.time()
_ = fib(25)
end = time.time()
self.assertGreater(end - start, 1e-3)
if __name__ == '__main__':
unittest.main()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment