about summary refs log tree commit diff stats
path: root/test/fib.lua
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-10-19 21:38:48 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-10-22 19:24:44 -0700
commit74f8cd15bb43110973deffdeb9dd229797e5b328 (patch)
tree12d6b5475a786eacf7a5a79b03b2b85621578ec6 /test/fib.lua
downloadteliva-74f8cd15bb43110973deffdeb9dd229797e5b328.tar.gz
new fork of Lua 5.1
https://www.lua.org
Diffstat (limited to 'test/fib.lua')
-rw-r--r--test/fib.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/fib.lua b/test/fib.lua
new file mode 100644
index 0000000..97a921b
--- /dev/null
+++ b/test/fib.lua
@@ -0,0 +1,40 @@
+-- fibonacci function with cache
+
+-- very inefficient fibonacci function
+function fib(n)
+	N=N+1
+	if n<2 then
+		return n
+	else
+		return fib(n-1)+fib(n-2)
+	end
+end
+
+-- a general-purpose value cache
+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
+
+-- run and time it
+function test(s,f)
+	N=0
+	local c=os.clock()
+	local v=f(n)
+	local t=os.clock()-c
+	print(s,n,v,t,N)
+end
+
+n=arg[1] or 24		-- for other values, do lua fib.lua XX
+n=tonumber(n)
+print("","n","value","time","evals")
+test("plain",fib)
+fib=cache(fib)
+test("cached",fib)