From a645fbc07894cb8d53a7ac00ea4c28c8fcc732e1 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 28 Nov 2024 15:41:49 -0800 Subject: [PATCH 1/2] add regression test for size of global_table --- test/core.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/core.lua b/test/core.lua index cc102984eb..f110fe6a02 100644 --- a/test/core.lua +++ b/test/core.lua @@ -38,3 +38,23 @@ function test.getHackPath_chdir() expect.eq(clean_path(dfhack.getHackPath()), clean_path(fs.getcwd())) end) end + +-- validates that the size in df.globals.xml is correct +function test.global_table_size() + local elem_size = df.global_table_entry:sizeof() + local declared_arr_size = df.global.global_table:sizeof() // elem_size + for i=0,declared_arr_size-1 do + expect.true_(df._displace(df.global.global_table[0], i, elem_size).address, + 'nil address found in middle of global_table at idx ' .. i) + end + if df._displace(df.global.global_table[0], declared_arr_size, elem_size).address then + local idx_of_nil + for i=declared_arr_size+1,declared_arr_size*2 do + if not df._displace(df.global.global_table[0], i, elem_size).address then + idx_of_nil = i + break + end + end + expect.fail('nil *not* found at end of declared global-table (idx ' .. declared_arr_size .. '); table size should be: ' .. idx_of_nil) + end +end From 5dfaa5625395dc4895ef3f1d989abe4bdb124493 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 28 Nov 2024 15:51:09 -0800 Subject: [PATCH 2/2] simplify test --- test/core.lua | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/test/core.lua b/test/core.lua index f110fe6a02..58f139a8cb 100644 --- a/test/core.lua +++ b/test/core.lua @@ -42,19 +42,11 @@ end -- validates that the size in df.globals.xml is correct function test.global_table_size() local elem_size = df.global_table_entry:sizeof() - local declared_arr_size = df.global.global_table:sizeof() // elem_size - for i=0,declared_arr_size-1 do - expect.true_(df._displace(df.global.global_table[0], i, elem_size).address, - 'nil address found in middle of global_table at idx ' .. i) - end - if df._displace(df.global.global_table[0], declared_arr_size, elem_size).address then - local idx_of_nil - for i=declared_arr_size+1,declared_arr_size*2 do - if not df._displace(df.global.global_table[0], i, elem_size).address then - idx_of_nil = i - break - end - end - expect.fail('nil *not* found at end of declared global-table (idx ' .. declared_arr_size .. '); table size should be: ' .. idx_of_nil) + local actual_arr_size = 0 + while df._displace(df.global.global_table[0], actual_arr_size, elem_size).address do + actual_arr_size = actual_arr_size + 1 end + local declared_arr_size = df.global.global_table:sizeof() // elem_size + expect.eq(declared_arr_size, actual_arr_size, + ('global_table size mismatch: expected: %d, actual: %d'):format(declared_arr_size, actual_arr_size)) end