xref: /f-stack/app/redis-5.0.5/deps/lua/test/fib.lua (revision 572c4311)
1*572c4311Sfengbojiang-- fibonacci function with cache
2*572c4311Sfengbojiang
3*572c4311Sfengbojiang-- very inefficient fibonacci function
4*572c4311Sfengbojiangfunction fib(n)
5*572c4311Sfengbojiang	N=N+1
6*572c4311Sfengbojiang	if n<2 then
7*572c4311Sfengbojiang		return n
8*572c4311Sfengbojiang	else
9*572c4311Sfengbojiang		return fib(n-1)+fib(n-2)
10*572c4311Sfengbojiang	end
11*572c4311Sfengbojiangend
12*572c4311Sfengbojiang
13*572c4311Sfengbojiang-- a general-purpose value cache
14*572c4311Sfengbojiangfunction cache(f)
15*572c4311Sfengbojiang	local c={}
16*572c4311Sfengbojiang	return function (x)
17*572c4311Sfengbojiang		local y=c[x]
18*572c4311Sfengbojiang		if not y then
19*572c4311Sfengbojiang			y=f(x)
20*572c4311Sfengbojiang			c[x]=y
21*572c4311Sfengbojiang		end
22*572c4311Sfengbojiang		return y
23*572c4311Sfengbojiang	end
24*572c4311Sfengbojiangend
25*572c4311Sfengbojiang
26*572c4311Sfengbojiang-- run and time it
27*572c4311Sfengbojiangfunction test(s,f)
28*572c4311Sfengbojiang	N=0
29*572c4311Sfengbojiang	local c=os.clock()
30*572c4311Sfengbojiang	local v=f(n)
31*572c4311Sfengbojiang	local t=os.clock()-c
32*572c4311Sfengbojiang	print(s,n,v,t,N)
33*572c4311Sfengbojiangend
34*572c4311Sfengbojiang
35*572c4311Sfengbojiangn=arg[1] or 24		-- for other values, do lua fib.lua XX
36*572c4311Sfengbojiangn=tonumber(n)
37*572c4311Sfengbojiangprint("","n","value","time","evals")
38*572c4311Sfengbojiangtest("plain",fib)
39*572c4311Sfengbojiangfib=cache(fib)
40*572c4311Sfengbojiangtest("cached",fib)
41