From 3fc76afc09cd4460678d858937112ecf25abd555 Mon Sep 17 00:00:00 2001 From: Josh Yelon Date: Mon, 12 Jul 2021 16:32:58 -0400 Subject: [PATCH] Deques now have metatables, fixed deque unit tests --- luprex/core/cpp/table.cpp | 8 ++++-- luprex/core/lua/ut-table.lua | 55 +++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/luprex/core/cpp/table.cpp b/luprex/core/cpp/table.cpp index 0391d66b..bf261bf6 100644 --- a/luprex/core/cpp/table.cpp +++ b/luprex/core/cpp/table.cpp @@ -204,11 +204,11 @@ int deque_make_room(lua_State *L, int deque, int left, int fill, int max) { return max; } - LuaDefine(deque_create, "c") { LuaRet rdeque; - LuaStack LS(L, rdeque); - const int imax = 8; + LuaVar classobj; + LuaStack LS(L, rdeque, classobj); + const int imax = 4; LS.createtable(rdeque, DEQUE_BASE + imax - 1, 0); LS.rawseti(rdeque, DEQUE_LEFT, 0); LS.rawseti(rdeque, DEQUE_FILL, 0); @@ -216,6 +216,8 @@ LuaDefine(deque_create, "c") { for (int i = 0; i < imax; i++) { LS.rawseti(rdeque, DEQUE_BASE + i, 0); } + LS.makeclass(classobj, "deque"); + LS.setmetatable(rdeque, classobj); return LS.result(); } diff --git a/luprex/core/lua/ut-table.lua b/luprex/core/lua/ut-table.lua index f892db8f..bf8e48f6 100644 --- a/luprex/core/lua/ut-table.lua +++ b/luprex/core/lua/ut-table.lua @@ -56,25 +56,36 @@ function unittests.tables() assert(table.equal(t, {3,4,3,4})) end --- function unittests.queues() --- local q = queue.create() --- assert(queue.size(q) == 0) --- queue.push(q, 27) --- assert(queue.size(q) == 1) --- queue.push(q, 45) --- assert(queue.nth(q, 1) == 27) --- assert(queue.nth(q, 2) == 45) --- assert(queue.size(q) == 2) --- assert(queue.pop(q) == 27) --- assert(queue.size(q) == 1) --- assert(queue.pop(q) == 45) --- assert(queue.size(q) == 0) --- assert(queue.pop(q) == nil) --- assert(queue.size(q) == 0) --- for i=1,50 do --- queue.push(q,i) --- end --- for i=1,50 do --- assert(queue.pop(q)==i) --- end --- end +function unittests.deque() + local d = deque.create() + for i=1,7 do + for j=1,i do + d:pushr(j) + end + for j=1,i do + assert(d:nthl(j) == j) + end + for j=1,i do + assert(d:popl() == j) + end + end + for i=1,7 do + for j=1,i do + d:pushl(j) + end + for j=1,i do + assert(d:nthr(j) == j) + end + for j=1,i do + assert(d:popr() == j) + end + end + for i=1,7 do + for j=1,i do + d:pushr(j) + end + for j=1,i do + assert(d:popr() == i+1-j) + end + end +end