From 35ed9dca3cb05c210409d789de3a983defcc5f1b Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 3 Apr 2008 03:58:15 +0000 Subject: [PATCH] Fix sorting with custom comparator, and add unit tests to regress --- src/core/org/luaj/vm/LTable.java | 2 +- src/test/java/org/luaj/vm/LuaJTest.java | 4 ++++ src/test/res/sort.lua | 27 +++++++++++++++++++++++++ version.properties | 2 +- 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/test/res/sort.lua diff --git a/src/core/org/luaj/vm/LTable.java b/src/core/org/luaj/vm/LTable.java index d1614288..40a4a23a 100644 --- a/src/core/org/luaj/vm/LTable.java +++ b/src/core/org/luaj/vm/LTable.java @@ -645,7 +645,7 @@ public class LTable extends LValue { vm.pushlvalue(m_vector[i]); vm.pushlvalue(m_vector[j]); vm.call(2, 1); - boolean result = vm.toboolean(1); + boolean result = vm.toboolean(-1); vm.resettop(); return result; } else { diff --git a/src/test/java/org/luaj/vm/LuaJTest.java b/src/test/java/org/luaj/vm/LuaJTest.java index 05763ef1..ab74b342 100644 --- a/src/test/java/org/luaj/vm/LuaJTest.java +++ b/src/test/java/org/luaj/vm/LuaJTest.java @@ -148,6 +148,10 @@ public class LuaJTest extends TestCase { runTest( "strlib" ); } + public void testSort() throws IOException, InterruptedException { + runTest( "sort" ); + } + public void testTable() throws IOException, InterruptedException { runTest( "table" ); } diff --git a/src/test/res/sort.lua b/src/test/res/sort.lua new file mode 100644 index 00000000..39fc2b51 --- /dev/null +++ b/src/test/res/sort.lua @@ -0,0 +1,27 @@ +-- concat +print( '-- sort tests' ) +local function tryall(cmp) + local function try(t) + print( table.concat(t,'-') ) + if pcall( table.sort, t, cmp ) then + print( table.concat(t,'-') ) + else + print( 'sort failed' ) + end + end + try{ 2, 4, 6, 8, 1, 3, 5, 7 } + try{ 333, 222, 111 } + try{ "www", "xxx", "yyy", "aaa", "bbb", "ccc" } + try{ 21, 23, "25", 27, 22, "24", 26, 28 } +end +local function comparator(a,b) + return tonumber(a)