mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-08 06:41:58 +00:00
55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
"""
|
|
Downloaded from https://code.google.com/p/benchrun/
|
|
|
|
Fibonacci numbers test benchmark
|
|
"""
|
|
|
|
from benchrun import Benchmark, clock
|
|
|
|
def fib1(n):
|
|
if n < 2:
|
|
return n
|
|
return fib1(n-1) + fib1(n-2)
|
|
|
|
def fib2(n):
|
|
if n < 2:
|
|
return n
|
|
a, b = 1, 0
|
|
for i in xrange(n-1):
|
|
a, b = a+b, a
|
|
return a
|
|
|
|
class FibonacciBenchmark(Benchmark):
|
|
"""Compare time to compute the nth Fibonacci number recursively
|
|
(fib1) and iteratively (fib2)."""
|
|
|
|
# Execute for all combinations of these parameters
|
|
parameters = ['version', 'n']
|
|
version = ['fib1', 'fib2']
|
|
n = range(0, 60, 5)
|
|
|
|
# Compare timings against this parameter value
|
|
reference = ('version', 'fib1')
|
|
|
|
def run(self, n, version):
|
|
f = globals()[version]
|
|
# Don't repeat when slow
|
|
if version == 'fib1' and n > 10:
|
|
# Skip altogether
|
|
if n > 30:
|
|
return None
|
|
t1 = clock()
|
|
f(n)
|
|
t2 = clock()
|
|
return t2-t1
|
|
# Need to repeat many times to get accurate timings for small n
|
|
else:
|
|
t1 = clock()
|
|
f(n); f(n); f(n); f(n); f(n); f(n); f(n)
|
|
f(n); f(n); f(n); f(n); f(n); f(n); f(n)
|
|
t2 = clock()
|
|
return (t2 - t1) / 14
|
|
|
|
if __name__ == '__main__':
|
|
FibonacciBenchmark().print_result()
|