From 720c6027d686310cc0e585239a339bbcbcdfce06 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Tue, 8 Apr 2008 15:49:40 +0000 Subject: [PATCH] Add unit test for weak tables. --- src/test/java/org/luaj/vm/LuaJTest.java | 4 + src/test/res/weaktable.lua | 106 ++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 src/test/res/weaktable.lua diff --git a/src/test/java/org/luaj/vm/LuaJTest.java b/src/test/java/org/luaj/vm/LuaJTest.java index ab74b342..0dbd04da 100644 --- a/src/test/java/org/luaj/vm/LuaJTest.java +++ b/src/test/java/org/luaj/vm/LuaJTest.java @@ -172,6 +172,10 @@ public class LuaJTest extends TestCase { runTest( "upvalues3" ); } + public void testWeakTable() throws IOException, InterruptedException { + runTest( "weaktable" ); + } + //*/ private void runTest( String testName ) throws IOException, InterruptedException { diff --git a/src/test/res/weaktable.lua b/src/test/res/weaktable.lua new file mode 100644 index 00000000..fd763387 --- /dev/null +++ b/src/test/res/weaktable.lua @@ -0,0 +1,106 @@ +-- concat +print( '-- weak table tests' ) + +-- construct new weak table +function newweak(t) + return setmetatable(t,{__mode="v"}) +end + +-- print the elements of a table in a platform-independent way +function eles(t,f) + f = f or pairs + all = {} + for k,v in f(t) do + table.insert( all, "["..tostring(k).."]="..tostring(v) ) + end + table.sort( all ) + return "{"..table.concat(all,',').."}" +end + +-- insert, maxn +print( '-- insert, maxn tests' ) +local t = newweak{ "one", "two", "three", a='aaa', b='bbb', c='ccc' } +print( eles(t) ) +table.insert(t,'six'); print( eles(t) ) +table.insert(t,1,'seven'); print( eles(t) ) +table.insert(t,4,'eight'); print( eles(t) ) +table.insert(t,7,'nine'); print( eles(t) ) +table.insert(t,10,'ten'); print( eles(t) ) + +-- remove +print( '-- remove tests' ) +t = newweak{ "one", "two", "three", "four", "five", "six", "seven", [10]="ten", a='aaa', b='bbb', c='ccc' } +print( eles(t) ) +print( table.remove(t) ); print( eles(t) ) +print( table.remove(t,1) ); print( eles(t) ) +print( table.remove(t,3) ); print( eles(t) ) +print( table.remove(t,5) ); print( eles(t) ) +print( table.remove(t,10) ); print( eles(t) ) +print( table.remove(t,-1) ); print( eles(t) ) +print( table.remove(t,-1) ) ; print( eles(t) ) + +-- sort +print( '-- sort tests' ) +function sorttest(t,f) + t = newweak(t) + print( table.concat(t,'-') ) + if f then + table.sort(t,f) + else + table.sort(t) + end + print( table.concat(t,'-') ) +end +sorttest{ "one", "two", "three" } +sorttest{ "www", "vvv", "uuu", "ttt", "sss", "zzz", "yyy", "xxx" } +sorttest( { "www", "vvv", "uuu", "ttt", "sss", "zzz", "yyy", "xxx" }, function(a,b) return b