From b8147afcc5bfbeb5fad62e4f68f1b88fc6c60d96 Mon Sep 17 00:00:00 2001 From: sanine Date: Thu, 18 Aug 2022 20:52:26 -0500 Subject: add lua-5.1.5 files --- libs/lua-5.1.5/test/README | 26 ++++++++ libs/lua-5.1.5/test/bisect.lua | 27 +++++++++ libs/lua-5.1.5/test/cf.lua | 16 +++++ libs/lua-5.1.5/test/echo.lua | 5 ++ libs/lua-5.1.5/test/env.lua | 7 +++ libs/lua-5.1.5/test/factorial.lua | 32 ++++++++++ libs/lua-5.1.5/test/fib.lua | 40 ++++++++++++ libs/lua-5.1.5/test/fibfor.lua | 13 ++++ libs/lua-5.1.5/test/globals.lua | 13 ++++ libs/lua-5.1.5/test/hello.lua | 3 + libs/lua-5.1.5/test/life.lua | 111 ++++++++++++++++++++++++++++++++++ libs/lua-5.1.5/test/luac.lua | 7 +++ libs/lua-5.1.5/test/printf.lua | 7 +++ libs/lua-5.1.5/test/readonly.lua | 12 ++++ libs/lua-5.1.5/test/sieve.lua | 29 +++++++++ libs/lua-5.1.5/test/sort.lua | 66 ++++++++++++++++++++ libs/lua-5.1.5/test/table.lua | 12 ++++ libs/lua-5.1.5/test/trace-calls.lua | 32 ++++++++++ libs/lua-5.1.5/test/trace-globals.lua | 38 ++++++++++++ libs/lua-5.1.5/test/xd.lua | 14 +++++ 20 files changed, 510 insertions(+) create mode 100644 libs/lua-5.1.5/test/README create mode 100644 libs/lua-5.1.5/test/bisect.lua create mode 100644 libs/lua-5.1.5/test/cf.lua create mode 100644 libs/lua-5.1.5/test/echo.lua create mode 100644 libs/lua-5.1.5/test/env.lua create mode 100644 libs/lua-5.1.5/test/factorial.lua create mode 100644 libs/lua-5.1.5/test/fib.lua create mode 100644 libs/lua-5.1.5/test/fibfor.lua create mode 100644 libs/lua-5.1.5/test/globals.lua create mode 100644 libs/lua-5.1.5/test/hello.lua create mode 100644 libs/lua-5.1.5/test/life.lua create mode 100644 libs/lua-5.1.5/test/luac.lua create mode 100644 libs/lua-5.1.5/test/printf.lua create mode 100644 libs/lua-5.1.5/test/readonly.lua create mode 100644 libs/lua-5.1.5/test/sieve.lua create mode 100644 libs/lua-5.1.5/test/sort.lua create mode 100644 libs/lua-5.1.5/test/table.lua create mode 100644 libs/lua-5.1.5/test/trace-calls.lua create mode 100644 libs/lua-5.1.5/test/trace-globals.lua create mode 100644 libs/lua-5.1.5/test/xd.lua (limited to 'libs/lua-5.1.5/test') diff --git a/libs/lua-5.1.5/test/README b/libs/lua-5.1.5/test/README new file mode 100644 index 0000000..0c7f38b --- /dev/null +++ b/libs/lua-5.1.5/test/README @@ -0,0 +1,26 @@ +These are simple tests for Lua. Some of them contain useful code. +They are meant to be run to make sure Lua is built correctly and also +to be read, to see how Lua programs look. + +Here is a one-line summary of each program: + + bisect.lua bisection method for solving non-linear equations + cf.lua temperature conversion table (celsius to farenheit) + echo.lua echo command line arguments + env.lua environment variables as automatic global variables + factorial.lua factorial without recursion + fib.lua fibonacci function with cache + fibfor.lua fibonacci numbers with coroutines and generators + globals.lua report global variable usage + hello.lua the first program in every language + life.lua Conway's Game of Life + luac.lua bare-bones luac + printf.lua an implementation of printf + readonly.lua make global variables readonly + sieve.lua the sieve of of Eratosthenes programmed with coroutines + sort.lua two implementations of a sort function + table.lua make table, grouping all data for the same item + trace-calls.lua trace calls + trace-globals.lua trace assigments to global variables + xd.lua hex dump + diff --git a/libs/lua-5.1.5/test/bisect.lua b/libs/lua-5.1.5/test/bisect.lua new file mode 100644 index 0000000..f91e69b --- /dev/null +++ b/libs/lua-5.1.5/test/bisect.lua @@ -0,0 +1,27 @@ +-- bisection method for solving non-linear equations + +delta=1e-6 -- tolerance + +function bisect(f,a,b,fa,fb) + local c=(a+b)/2 + io.write(n," c=",c," a=",a," b=",b,"\n") + if c==a or c==b or math.abs(a-b) posted to lua-l +-- modified to use ANSI terminal escape sequences +-- modified to use for instead of while + +local write=io.write + +ALIVE="¥" DEAD="þ" +ALIVE="O" DEAD="-" + +function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary + for i=1,10000 do end + -- local i=os.clock()+1 while(os.clock() 0 do + local xm1,x,xp1,xi=self.w-1,self.w,1,self.w + while xi > 0 do + local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] + + self[y][xm1] + self[y][xp1] + + self[yp1][xm1] + self[yp1][x] + self[yp1][xp1] + next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0 + xm1,x,xp1,xi = x,xp1,xp1+1,xi-1 + end + ym1,y,yp1,yi = y,yp1,yp1+1,yi-1 + end +end + +-- output the array to screen +function _CELLS:draw() + local out="" -- accumulate to reduce flicker + for y=1,self.h do + for x=1,self.w do + out=out..(((self[y][x]>0) and ALIVE) or DEAD) + end + out=out.."\n" + end + write(out) +end + +-- constructor +function CELLS(w,h) + local c = ARRAY2D(w,h) + c.spawn = _CELLS.spawn + c.evolve = _CELLS.evolve + c.draw = _CELLS.draw + return c +end + +-- +-- shapes suitable for use with spawn() above +-- +HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 } +GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 } +EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 } +FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 } +BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 } + +-- the main routine +function LIFE(w,h) + -- create two arrays + local thisgen = CELLS(w,h) + local nextgen = CELLS(w,h) + + -- create some life + -- about 1000 generations of fun, then a glider steady-state + thisgen:spawn(GLIDER,5,4) + thisgen:spawn(EXPLODE,25,10) + thisgen:spawn(FISH,4,12) + + -- run until break + local gen=1 + write("\027[2J") -- ANSI clear screen + while 1 do + thisgen:evolve(nextgen) + thisgen,nextgen = nextgen,thisgen + write("\027[H") -- ANSI home cursor + thisgen:draw() + write("Life - generation ",gen,"\n") + gen=gen+1 + if gen>2000 then break end + --delay() -- no delay + end +end + +LIFE(40,20) diff --git a/libs/lua-5.1.5/test/luac.lua b/libs/lua-5.1.5/test/luac.lua new file mode 100644 index 0000000..96a0a97 --- /dev/null +++ b/libs/lua-5.1.5/test/luac.lua @@ -0,0 +1,7 @@ +-- bare-bones luac in Lua +-- usage: lua luac.lua file.lua + +assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua") +f=assert(io.open("luac.out","wb")) +assert(f:write(string.dump(assert(loadfile(arg[1]))))) +assert(f:close()) diff --git a/libs/lua-5.1.5/test/printf.lua b/libs/lua-5.1.5/test/printf.lua new file mode 100644 index 0000000..58c63ff --- /dev/null +++ b/libs/lua-5.1.5/test/printf.lua @@ -0,0 +1,7 @@ +-- an implementation of printf + +function printf(...) + io.write(string.format(...)) +end + +printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date()) diff --git a/libs/lua-5.1.5/test/readonly.lua b/libs/lua-5.1.5/test/readonly.lua new file mode 100644 index 0000000..85c0b4e --- /dev/null +++ b/libs/lua-5.1.5/test/readonly.lua @@ -0,0 +1,12 @@ +-- make global variables readonly + +local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end +local g={} +local G=getfenv() +setmetatable(g,{__index=G,__newindex=f}) +setfenv(1,g) + +-- an example +rawset(g,"x",3) +x=2 +y=1 -- cannot redefine `y' diff --git a/libs/lua-5.1.5/test/sieve.lua b/libs/lua-5.1.5/test/sieve.lua new file mode 100644 index 0000000..0871bb2 --- /dev/null +++ b/libs/lua-5.1.5/test/sieve.lua @@ -0,0 +1,29 @@ +-- the sieve of of Eratosthenes programmed with coroutines +-- typical usage: lua -e N=1000 sieve.lua | column + +-- generate all the numbers from 2 to n +function gen (n) + return coroutine.wrap(function () + for i=2,n do coroutine.yield(i) end + end) +end + +-- filter the numbers generated by `g', removing multiples of `p' +function filter (p, g) + return coroutine.wrap(function () + while 1 do + local n = g() + if n == nil then return end + if math.mod(n, p) ~= 0 then coroutine.yield(n) end + end + end) +end + +N=N or 1000 -- from command line +x = gen(N) -- generate primes up to N +while 1 do + local n = x() -- pick a number until done + if n == nil then break end + print(n) -- must be a prime number + x = filter(n, x) -- now remove its multiples +end diff --git a/libs/lua-5.1.5/test/sort.lua b/libs/lua-5.1.5/test/sort.lua new file mode 100644 index 0000000..0bcb15f --- /dev/null +++ b/libs/lua-5.1.5/test/sort.lua @@ -0,0 +1,66 @@ +-- two implementations of a sort function +-- this is an example only. Lua has now a built-in function "sort" + +-- extracted from Programming Pearls, page 110 +function qsort(x,l,u,f) + if ly end) + show("after reverse selection sort",x) + qsort(x,1,n,function (x,y) return x>> ",string.rep(" ",level)) + if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end + t=debug.getinfo(2) + if event=="call" then + level=level+1 + else + level=level-1 if level<0 then level=0 end + end + if t.what=="main" then + if event=="call" then + io.write("begin ",t.short_src) + else + io.write("end ",t.short_src) + end + elseif t.what=="Lua" then +-- table.foreach(t,print) + io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">") + else + io.write(event," ",t.name or "(C)"," [",t.what,"] ") + end + io.write("\n") +end + +debug.sethook(hook,"cr") +level=0 diff --git a/libs/lua-5.1.5/test/trace-globals.lua b/libs/lua-5.1.5/test/trace-globals.lua new file mode 100644 index 0000000..295e670 --- /dev/null +++ b/libs/lua-5.1.5/test/trace-globals.lua @@ -0,0 +1,38 @@ +-- trace assigments to global variables + +do + -- a tostring that quotes strings. note the use of the original tostring. + local _tostring=tostring + local tostring=function(a) + if type(a)=="string" then + return string.format("%q",a) + else + return _tostring(a) + end + end + + local log=function (name,old,new) + local t=debug.getinfo(3,"Sl") + local line=t.currentline + io.write(t.short_src) + if line>=0 then io.write(":",line) end + io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n") + end + + local g={} + local set=function (t,name,value) + log(name,g[name],value) + g[name]=value + end + setmetatable(getfenv(),{__index=g,__newindex=set}) +end + +-- an example + +a=1 +b=2 +a=10 +b=20 +b=nil +b=200 +print(a,b,c) diff --git a/libs/lua-5.1.5/test/xd.lua b/libs/lua-5.1.5/test/xd.lua new file mode 100644 index 0000000..ebc3eff --- /dev/null +++ b/libs/lua-5.1.5/test/xd.lua @@ -0,0 +1,14 @@ +-- hex dump +-- usage: lua xd.lua < file + +local offset=0 +while true do + local s=io.read(16) + if s==nil then return end + io.write(string.format("%08X ",offset)) + string.gsub(s,"(.)", + function (c) io.write(string.format("%02X ",string.byte(c))) end) + io.write(string.rep(" ",3*(16-string.len(s)))) + io.write(" ",string.gsub(s,"%c","."),"\n") + offset=offset+16 +end -- cgit v1.2.1