From 882daa5d534b755366c7c84e11b357b0dd5b7ecd Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Fri, 18 Apr 2008 14:46:09 +0000 Subject: [PATCH] improve portability of test --- src/test/res/ids.lua | 22 ++++++++++++++++++++++ src/test/res/test6.lua | 33 +++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/test/res/ids.lua b/src/test/res/ids.lua index 58075d0d..a1ca7283 100644 --- a/src/test/res/ids.lua +++ b/src/test/res/ids.lua @@ -1,5 +1,7 @@ -- utility to give tables and functions uniform ids for testing ids = {} + +-- return unique id for the value, independent of object id function id(obj) if not obj or type(obj) == 'number' or type(obj) == 'string' or type(obj) == 'boolean' then return obj @@ -12,3 +14,23 @@ function id(obj) ids[obj] = type(obj)..'.'..tostring(#ids) return ids[obj] end + +-- return key-value pairs sorted by keys +function spairs(unsorted) + local keys = {} + for k,v in pairs(unsorted) do + table.insert(keys,k) + end + table.sort(keys) + local lookup = {} + for i,k in ipairs(keys) do + lookup[k] = i; + end + local iterator = function(tbl,key) + local i = lookup[key] + local j,k = next(keys,i) + if not j then return nil end + return k,unsorted[k] + end + return iterator, table, nil +end \ No newline at end of file diff --git a/src/test/res/test6.lua b/src/test/res/test6.lua index ab2b4c53..61ed1001 100644 --- a/src/test/res/test6.lua +++ b/src/test/res/test6.lua @@ -1,9 +1,11 @@ +package.path = "?.lua;src/test/res/?.lua" +require 'ids' t = { 11, 22, 33, you='one', me='two' } print( "---------" ) for a,b in pairs(t) do - print( a, b ) + print( id(a), id(b) ) end print( "----" ) print( "t[2]", t[2] ) @@ -15,10 +17,12 @@ print( "me", me ) print( "fred", fred ) print( "t[me]", t[me] ) print( "t[fred]", t[fred] ) - +function out(t,...) + print(type(t),...) +end -- basic metatable setting t = { 11, 22, 33, you='one', me='two' } -mt = { __index = print, __newindex = print } +mt = { __index = out, __newindex = out } setmetatable(t,mt) a = t[11] b = t.one @@ -29,7 +33,7 @@ t[1] = 'pipe' print( a, b, c, d ) print( "---------" ) for a,b in pairs(t) do - print( a, b ) + print( id(a), id(b) ) end print( "----" ) @@ -45,7 +49,7 @@ print( t.me ) t[5] = 99 print( "---------" ) for a,b in pairs(s) do - print( a, b ) + print( id(a), id(b) ) end print( "----" ) @@ -65,30 +69,31 @@ function Vector:dot(v) end v1 = Vector:new(3,4) -print( "--------" ) +print( "---------" ) for a,b in pairs(v1) do - print( a, b ) + print( id(a), id(b) ) end + print( "----" ) v2 = Vector:new(2,1) print( v2:dot(v1) ) -print( Vector ) +print( id(Vector) ) -print( "---------" ) -for a,b in pairs(Vector) do - print( a, b ) +print( "=======" ) +for a,b in spairs(Vector) do + print( id(a), id(b) ) end print( "----" ) -print( v1, v2 ) +print( id(v1), id(v2) ) -print( Vector_mt, getmetatable(v1), getmetatable(v2) ) +print( id(Vector_mt), id(getmetatable(v1)), id(getmetatable(v2)) ) print( "---------" ) for a,b in pairs(Vector_mt) do - print( a, b ) + print( id(a), id(b) ) end print( "----" )