Fix weak tables, improve unit test
This commit is contained in:
@@ -1,3 +1,11 @@
|
||||
local t = { "one", "two", "three", a='aaa', b='bbb', c='ccc' }
|
||||
table.insert(t,'six');
|
||||
table.insert(t,1,'seven');
|
||||
table.insert(t,4,'eight');
|
||||
table.insert(t,7,'nine');
|
||||
table.insert(t,10,'ten'); print( #t )
|
||||
|
||||
|
||||
-- concat
|
||||
print( '-- concat tests' )
|
||||
function tryconcat(t)
|
||||
@@ -30,26 +38,26 @@ function eles(t,f)
|
||||
end
|
||||
|
||||
-- insert, maxn
|
||||
print( '-- insert, maxn tests' )
|
||||
print( '-- insert, len tests' )
|
||||
local t = { "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) )
|
||||
print( eles(t), #t )
|
||||
table.insert(t,'six'); print( eles(t), #t )
|
||||
table.insert(t,1,'seven'); print( eles(t), #t )
|
||||
table.insert(t,4,'eight'); print( eles(t), #t )
|
||||
table.insert(t,7,'nine'); print( eles(t), #t )
|
||||
table.insert(t,10,'ten'); print( eles(t), #t )
|
||||
|
||||
-- remove
|
||||
print( '-- remove tests' )
|
||||
t = { "one", "two", "three", "four", "five", "six", "seven", [10]="ten", a='aaa', b='bbb', c='ccc' }
|
||||
print( eles(t) )
|
||||
print( 'table.remove(t)', table.remove(t) ); print( eles(t) )
|
||||
print( 'table.remove(t,1)', table.remove(t,1) ); print( eles(t) )
|
||||
print( 'table.remove(t,3)', table.remove(t,3) ); print( eles(t) )
|
||||
print( 'table.remove(t,5)', table.remove(t,5) ); print( eles(t) )
|
||||
print( 'table.remove(t,10)', table.remove(t,10) ); print( eles(t) )
|
||||
print( 'table.remove(t,-1)', table.remove(t,-1) ); print( eles(t) )
|
||||
print( 'table.remove(t,-1)', table.remove(t,-1) ) ; print( eles(t) )
|
||||
print( eles(t), #t )
|
||||
print( 'table.remove(t)', table.remove(t) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,1)', table.remove(t,1) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,3)', table.remove(t,3) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,5)', table.remove(t,5) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,10)', table.remove(t,10) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,-1)', table.remove(t,-1) ); print( eles(t), #t )
|
||||
print( 'table.remove(t,-1)', table.remove(t,-1) ) ; print( eles(t), #t )
|
||||
|
||||
-- sort
|
||||
print( '-- sort tests' )
|
||||
|
||||
@@ -1,28 +1,29 @@
|
||||
|
||||
|
||||
function newtable(t)
|
||||
n = setmetatable(t,{__mode="v"})
|
||||
for k,v in pairs(t) do
|
||||
n[k] = v
|
||||
end
|
||||
return n;
|
||||
end
|
||||
|
||||
-- normalized printing
|
||||
function eles(t,f)
|
||||
f = f or pairs
|
||||
all = {}
|
||||
for k,v in f(t) do
|
||||
if type(v) == 'table' then
|
||||
v = '{'..tostring(v.v)..'}'
|
||||
end
|
||||
table.insert( all, "["..tostring(k).."]="..tostring(v) )
|
||||
end
|
||||
table.sort( all )
|
||||
return tostring(t).."{"..table.concat(all,',').."}"
|
||||
return "{"..table.concat(all,',').."}"
|
||||
end
|
||||
|
||||
function newtable(t)
|
||||
return setmetatable(t,{__mode="v"})
|
||||
end
|
||||
|
||||
function new(a)
|
||||
return {v='_'..tostring(a).."_"}
|
||||
end
|
||||
|
||||
-- basic weak-reference table test
|
||||
local src = "return { 'one', 'two', 'three', 'four', a='aaa', b='bbb', c='ccc', d='ddd'}"
|
||||
local weak = newtable( loadstring(src)() )
|
||||
local weak = newtable{ new('one'), new('two'), new('three'), new('four'), a=new('aaa'), b=new('bbb'), c=new('ccc'), d=new('ddd') }
|
||||
local strong = { weak[1], weak[3], a=weak.a, c=weak.c }
|
||||
print( 'before, weak:', eles(weak) )
|
||||
print( 'before, strong:', eles(strong) )
|
||||
|
||||
Reference in New Issue
Block a user