From: Pasi Kallinen Date: Sat, 22 Feb 2020 08:58:17 +0000 (+0200) Subject: Make lua selection negate return a new selection X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8ee044468daa904fee624ea823cadb479ae7b2e;p=nethack Make lua selection negate return a new selection ... instead of modifying the one given as a parameter. Also add tests for it. --- diff --git a/src/nhlsel.c b/src/nhlsel.c index b65f3216d..50ef4e21d 100644 --- a/src/nhlsel.c +++ b/src/nhlsel.c @@ -113,6 +113,7 @@ lua_State *L; return 1; } +/* Replace the topmost selection in the stack with a clone of it. */ /* local sel = selection.clone(sel); */ static int l_selection_clone(L) @@ -120,7 +121,6 @@ lua_State *L; { struct selectionvar *sel = l_selection_check(L, 1); struct selectionvar *tmp; - /* int x,y; */ /* REVIEW: unreferenced */ lua_pop(L, 1); (void) l_selection_new(L); tmp = l_selection_check(L, 1); @@ -207,17 +207,24 @@ lua_State *L; /* local s = selection.negate(sel); */ /* local s = selection.negate(); */ +/* local s = sel:negate(); */ static int l_selection_not(L) lua_State *L; { int argc = lua_gettop(L); - struct selectionvar *sel; + struct selectionvar *sel, *sel2; - if (argc == 0) + if (argc == 0) { (void) l_selection_new(L); - sel = l_selection_check(L, 1); - selection_not(sel); + sel = l_selection_check(L, 1); + selection_not(sel); + } else { + sel = l_selection_check(L, 1); + (void) l_selection_clone(L); + sel2 = l_selection_check(L, 1); + selection_not(sel2); + } lua_settop(L, 1); return 1; } diff --git a/test/test_sel.lua b/test/test_sel.lua index 8d71eec2b..ef811d310 100644 --- a/test/test_sel.lua +++ b/test/test_sel.lua @@ -1,8 +1,8 @@ - -- Test the selection -function test_selection() +-- test selection parameters +function test_selection_params() local sel = selection.new(); -- test set & get @@ -79,7 +79,28 @@ function test_selection() local sel2 = selection.clone(sel); local sel3 = sel2:clone(); -end -- selection_tests() + +end -- test_selection_params + +-- test negation +function test_sel_negate() + local sela = selection.negate(); + local selb = sela:negate(); + + for x = 0,nhc.COLNO - 2 do + for y = 0,nhc.ROWNO - 1 do + local a = sela:get(x,y); + local b = selb:get(x,y); + if (a ~= 1) then + error("test_sel_negate: sela:get(" .. x .. "," .. y .. ")==" .. a); + end + if (b ~= 0) then + error("test_sel_negate: selb:get(" .. x .. "," .. y .. ")==" .. b); + end + end + end +end -- test_sel_negate -test_selection(); +test_selection_params(); +test_sel_negate();