-- 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