#!/usr/local/bin/lua40a -- all_test.lua -- -- A replication of the tests we did at Blue Sky for embedded langs in Lua -- Chris Trimble -- December 15, 1997 -- -- improved by Scott Hassan -- and David Jeske -- November 1999 -- collectgarbage(100) dofile("obj_machinery.lua") function loop_test(INDEX) local i = 0 while i < INDEX do local j = 0 while j < 10 do j=j+1 end i=i+1 end end -- Index Accesses function index_test(INDEX) local i = 0 local b = 0 local table = {} while i < INDEX do table[i] = i i=i+1 end i = 0 while i < INDEX do b = table[i] i=i+1 end end -- Index String Accesses function index_string_test(INDEX) local i = 0 local b = 0 local table = {} while i < INDEX do table["some_string"] = i i=i+1 end i = 0 while i < INDEX do b = table["some_string"] i=i+1 end end -- file Line Test -- -- function file_line_test(INDEX) local line; local a; local fp = openfile("testfile.dat","r"); line = read(fp); while line do a = 1; line = read(fp); end closefile(fp) end; -- List append test -- -- using ".next" and ".prev" model for items in the list function list_insert(a_list,item) local new_item = {item = item} if a_list.head == nil then a_list.tail = new_item a_list.head = new_item else new_item.next = a_list.head a_list.head = new_item end a_list.count = a_list.count + 1 end function list_append(a_list,item) local new_item = {item = item} if a_list.tail == nil then a_list.head = new_item a_list.tail = new_item else a_list.tail.next = new_item a_list.tail = new_item end a_list.count = a_list.count + 1 end function list_append_test(INDEX) local list = { count = 0 } local i = 0 while (i < INDEX) do list_append(list,5) i = i + 1 end return list end -- this uses too much memory so it core dumps -- TEST_LIST = list_append_test(500000) function list_traverse_test(INDEX) local list = TEST_LIST local k local i = 0 while (k) do local item = k.item k = k.next end end -- System calls function system_test(SYSCALLS) local i = 0 while i < SYSCALLS do execute("echo test >/dev/null") i=i+1 end end -- Basic FP arith function basic_fp_test(BASEARITH) local i = 0 local j = 3.14159265359 local k = 3.14159265359 while i < BASEARITH do j = (j * (1/2.71828182846)) + 2.71828182846 k = (k / 2.71828182846) - 2.71828182846 i = i + 1 end end -- Complex FP arith function complex_fp_test(COMPLEXARITH) local i = 0 local j = 0 while i < COMPLEXARITH do j = j + sin( 3.14159265359 ) j = j + sqrt ( 69.283848 ) i = i + 1 end end -- File access test function file_access_test(FILEACCESS) local i = 0 while i < FILEACCESS do writeto("/tmp/tmp-test") if mod(i, 100) == 0 then write(i, " ") end local j = 0 while j < 100 do write("LUA LINE --> ", j, "\n") j = j + 1 end writeto() j = 0 readfrom("/tmp/tmp-test") while j < 100 do s = read() j = j + 1 end readfrom() i = i + 1 end end -- Nested loop test function nested_test(NESTED) local a = 0 local n = 0 while a < NESTED do local b = 0 n = n + 0.0342 while b < NESTED do local c = 0 n = n + 0.723 while c < NESTED do local d = 0 n = n * 0.0342 while d < NESTED do local e = 0 n = n * .723 while e < NESTED do n = n - 0.0342 e = e + 1 end d = d + 1 end c = c + 1 end b = b + 1 end a = a + 1 end end -- Nested loop test function nested_int_test(NESTED) local a = 0 local n = 0 while a < NESTED do local b = 0 n = n + 34 while b < NESTED do local c = 0 n = n + 9 while c < NESTED do local d = 0 n = n + 5 while d < NESTED do local e = 0 n = n + 3 while e < NESTED do n = n - 100 e = e + 1 end d = d + 1 end c = c + 1 end b = b + 1 end a = a + 1 end end ------------------------------------- function dothisR(a,b) return a end function returntest(count) local i = 0 local a,b while i < count do a = dothisR(1,2) i = i + 1 end end ------------------------------------- function dothisR2(a,b) return a,b end function return2test(count) local i = 0 local a,b while i < count do a,b = dothisR2(1,2) i = i + 1 end end ------------------------------------- function dothis(a) return a end function functest(count) local i = 0 while i < count do dothis(a) i = i + 1 end end ------------------------------------- object = { dothis = function (self, iter) return iter end } function objecttest(count) local i = 0 while i < count do object:dothis(10) i = i + 1 end end ------------------------------------- -- ########################################################################## function timefunk(label, f, count) start_sec,start_usec = utime() f(count) end_sec, end_usec = utime() diff_sec = end_sec - start_sec diff_usec = end_usec - start_usec diff = diff_sec + diff_usec print(label, count, "elapsed: ", diff) end -- Main -- timefunk("file_line_test", file_line_test, 1); --------------- -- these tests use lots of memory on Lua because it does -- not really have a "linked list" data-structure. timefunk("list_append_test", list_append_test, 50000) -- timefunk("list_traverse_test", list_traverse_test, 500000) timefunk("loop_test", loop_test, 500000) timefunk("index_test", index_test, 1000000) timefunk("index_string_test", index_string_test, 1000000) timefunk("nested_int_test", nested_int_test, 23) timefunk("nested_test", nested_test, 23) --timefunk("system_test", system_test, 2500) --timefunk("file_access_test", file_access_test, 5000) --timefunk("basic_fp_test", basic_fp_test, 3000000) --timefunk("complex_fp_test", complex_fp_test, 2000000) timefunk("returntest", returntest, 5000000) timefunk("functest", functest, 5000000) timefunk("objecttest", objecttest, 5000000)