[Tarantool-patches] [PATCH v2 luajit 34/45] test: enable <misc/stackov.lua> LuaJIT test

Sergey Bronnikov sergeyb at tarantool.org
Thu Aug 22 16:51:56 MSK 2024


Sergey,

On 21.08.2024 11:58, Sergey Kaplun wrote:
> This patch moves the aforementioned test from the <misc> to the <lang/>
> directory, includes it in <index>, names the subtests, and adds testing
> of the error message for all non-tail call cases.
>
> Part of tarantool/tarantool#9398
> ---
thanks for the patch! LGTM with a minor comment below.
>   test/LuaJIT-tests/lang/index       |  1 +
>   test/LuaJIT-tests/lang/stackov.lua | 48 ++++++++++++++++++++++++++++++
Probably filename "stack_overflow.lua" will be better. Feel free to ignore.
>   test/LuaJIT-tests/misc/stackov.lua | 40 -------------------------
>   3 files changed, 49 insertions(+), 40 deletions(-)
>   create mode 100644 test/LuaJIT-tests/lang/stackov.lua
>   delete mode 100644 test/LuaJIT-tests/misc/stackov.lua
>
> diff --git a/test/LuaJIT-tests/lang/index b/test/LuaJIT-tests/lang/index
> index b262c555..fa6db3c3 100644
> --- a/test/LuaJIT-tests/lang/index
> +++ b/test/LuaJIT-tests/lang/index
> @@ -17,6 +17,7 @@ lightud.lua
>   modulo.lua
>   concat.lua
>   self.lua
> +stackov.lua
>   table.lua
>   parse_comp.lua
>   parse_esc.lua
> diff --git a/test/LuaJIT-tests/lang/stackov.lua b/test/LuaJIT-tests/lang/stackov.lua
> new file mode 100644
> index 00000000..21ae40b6
> --- /dev/null
> +++ b/test/LuaJIT-tests/lang/stackov.lua
> @@ -0,0 +1,48 @@
> +local function f()
> +  f()
> +end
> +
> +local function g(i)
> +  g(i)
> +end
> +
> +local function vtail(...)
> +  return vtail(1, ...)
> +end
> +
> +local function vcall(...)
> +  vcall(1, ...)
> +end
> +
> +local function test_error_msg(func, s)
> +  local first = string.match(s, "[^\n]+")
> +  local line = debug.getinfo(func, "S").linedefined + 1
> +  assert(string.match(first, ":" .. line .. ": stack overflow$"))
> +
> +  local n = 1
> +  for _ in string.gmatch(s, "\n") do n = n + 1 end
> +  assert(n == 1 + 1 + 11 + 1 + 10)
> +end
> +
> +do --- Base test.
> +  local err, s = xpcall(f, debug.traceback)
> +  assert(err == false)
> +  test_error_msg(f, s)
> +end
> +
> +do --- Stack overflow with non-empty arg list.
> +  local err, s = xpcall(g, debug.traceback, 1)
> +  assert(err == false)
> +  test_error_msg(g, s)
> +end
> +
> +do --- Vararg tail call with non-empty arg list. +slow
> +  local err, s = xpcall(vtail, debug.traceback, 1)
> +  assert(err == false)
> +end
> +
> +do --- Vararg non-tail call.
> +  local err, s = xpcall(vcall, debug.traceback, 1)
> +  assert(err == false)
> +  test_error_msg(vcall, s)
> +end
> diff --git a/test/LuaJIT-tests/misc/stackov.lua b/test/LuaJIT-tests/misc/stackov.lua
> deleted file mode 100644
> index ef105af6..00000000
> --- a/test/LuaJIT-tests/misc/stackov.lua
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -
> -local function f()
> -  f()
> -end
> -
> -local err, s = xpcall(f, debug.traceback)
> -assert(err == false)
> -
> -local first = string.match(s, "[^\n]+")
> -local line = debug.getinfo(f, "S").linedefined+1
> -assert(string.match(first, ":"..line..": stack overflow$"))
> -
> -local n = 1
> -for _ in string.gmatch(s, "\n") do n = n + 1 end
> -assert(n == 1+1+11+1+10)
> -
> -local function g(i)
> -  g(i)
> -end
> -
> -local err, s = xpcall(g, debug.traceback, 1)
> -assert(err == false)
> -
> ---[[
> --- too slow
> -local function vtail(...)
> -  return vtail(1, ...)
> -end
> -
> -local err, s = xpcall(vtail, debug.traceback, 1)
> -assert(err == false)
> ---]]
> -
> -local function vcall(...)
> -  vcall(1, ...)
> -end
> -
> -local err, s = xpcall(vcall, debug.traceback, 1)
> -assert(err == false)
> -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20240822/2bd7152a/attachment.htm>


More information about the Tarantool-patches mailing list