summaryrefslogtreecommitdiff
path: root/test/fib.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/fib.lua')
-rw-r--r--test/fib.lua30
1 files changed, 29 insertions, 1 deletions
diff --git a/test/fib.lua b/test/fib.lua
index 881cbdc3..d946946a 100644
--- a/test/fib.lua
+++ b/test/fib.lua
@@ -1,6 +1,7 @@
-- very inefficient fibonacci function
function fib(n)
+ N=N+1
if n<2 then
return n
else
@@ -8,4 +9,31 @@ function fib(n)
end
end
-print(fib(20))
+-- a much faster cached version
+
+function cache(f)
+ local c={}
+ return function (x)
+ local y=%c[x]
+ if not y then
+ y=%f(x)
+ %c[x]=y
+ end
+ return y
+ end
+end
+
+function test(s)
+ N=0
+ local c=clock()
+ local v=fib(n)
+ local t=clock()-c
+ print(s,n,v,t,N)
+end
+
+n=n or 24 -- for other values, do lua -e n=XX fib.lua
+n=tonumber(n)
+print("","n","value","time","evals")
+test("plain")
+fib=cache(fib)
+test("cached")