From: Sergey Bronnikov via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: Sergey Kaplun <skaplun@tarantool.org>, Maxim Kokryashkin <m.kokryashkin@tarantool.org> Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH luajit 05/25] test: enable <ffi_call.lua> in LuaJIT-tests Date: Tue, 23 Jan 2024 12:32:09 +0300 [thread overview] Message-ID: <ea276cc9-4bcb-4cd2-83fd-a94096e3bf18@tarantool.org> (raw) In-Reply-To: <6785a95ee05ea262eff6226bc7867c9280ea37ea.1705661401.git.skaplun@tarantool.org> Hi, Sergey! thanks for the patch! please take a look on my comments Sergey On 1/19/24 14:32, Sergey Kaplun wrote: > This patch removes unused `dofile()`. Also, it uses the basename of the > ctest library to be loaded via ffi. It adds groups with names of > subtests and enables the test in <index>. Complex type is undefined on > Windows, so the correponding tests are not enabled for this platform. > Fastcalls are enabled only for the x86 architecture. Stdcalls are > enabled only for Windows on x86. Tests with calls with 10 arguments with > sizes less than 8 bits are dummy for M1. This suite lacks a mechanism to > skip subtests satisfying complicated conditions, so it is done manually > by the corresponding `if` check. > > Part of tarantool/tarantool#9398 > --- > test/LuaJIT-tests/lib/ffi/ffi_call.lua | 180 +++++++++++++------------ > test/LuaJIT-tests/lib/ffi/index | 1 + > 2 files changed, 92 insertions(+), 89 deletions(-) > > diff --git a/test/LuaJIT-tests/lib/ffi/ffi_call.lua b/test/LuaJIT-tests/lib/ffi/ffi_call.lua > index 1eb5e906..c362f3e0 100644 > --- a/test/LuaJIT-tests/lib/ffi/ffi_call.lua > +++ b/test/LuaJIT-tests/lib/ffi/ffi_call.lua > @@ -1,8 +1,5 @@ > - > local ffi = require("ffi") > > -dofile("../common/ffi_util.inc") > - > local tonumber = tonumber > > ffi.cdef[[ > @@ -73,81 +70,87 @@ double __stdcall stdcall_dd(double a, double b); > float __stdcall stdcall_ff(float a, float b); > ]] > > -local C = ffi.load("../clib/ctest") > +local C = ffi.load("ctest") > > -assert(C.call_i(-42) == -41) > -assert(C.call_ii(-42, 17) == -42+17) > -assert(C.call_10i(-42, 17, 12345, 9987, -100, 11, 51, 0x12345678, 338, -78901234) == -42+17+12345+9987-100+11+51+0x12345678+338-78901234) > +do --- call int enum double float args > + assert(C.call_i(-42) == -41) > + assert(C.call_ii(-42, 17) == -42+17) > > -assert(C.call_ie(123) == 124) > + assert(C.call_ie(123) == 124) > > -assert(tonumber(C.call_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) > -assert(tonumber(C.call_ij(-17, 0x123456789LL)) == tonumber(0x123456789LL-17)) > -assert(tonumber(C.call_jj(-42, 17)) == -42+17) > -assert(tonumber(C.call_jj(0x123456789abcdef0LL, -0x789abcde99887766LL)) == tonumber(0x123456789abcdef0LL-0x789abcde99887766LL)) > + assert(tonumber(C.call_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) > + assert(tonumber(C.call_ij(-17, 0x123456789LL)) == tonumber(0x123456789LL-17)) > + assert(tonumber(C.call_jj(-42, 17)) == -42+17) > + assert(tonumber(C.call_jj(0x123456789abcdef0LL, -0x789abcde99887766LL)) == tonumber(0x123456789abcdef0LL-0x789abcde99887766LL)) > > -assert(C.call_dd(12.5, -3.25) == 12.5-3.25) > -assert(C.call_10d(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x12345678, 338, -78901234.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x12345678+338-78901234.75) > + assert(C.call_dd(12.5, -3.25) == 12.5-3.25) > > -assert(C.call_ff(12.5, -3.25) == 12.5-3.25) > -assert(C.call_10f(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x123456, 338, -789012.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x123456+338-789012.75) > + assert(C.call_ff(12.5, -3.25) == 12.5-3.25) > > -assert(C.call_idifjd(-42, 17.125, 0x12345, -100.625, 12345678901234, -789012.75) == -42+17.125+0x12345-100.625+12345678901234-789012.75) > + assert(C.call_idifjd(-42, 17.125, 0x12345, -100.625, 12345678901234, -789012.75) == -42+17.125+0x12345-100.625+12345678901234-789012.75) > +end > + > +do --- call 10 args > + if not (jit.os == "OSX" and jit.arch == "arm64") then -- NYI > + assert(C.call_10i(-42, 17, 12345, 9987, -100, 11, 51, 0x12345678, 338, -78901234) == -42+17+12345+9987-100+11+51+0x12345678+338-78901234) these tests totally unreadable. I would rewrite such tests in the following manner: local args = {-42, 17, 12345, 9987, -100, 11, 51, 0x12345678, 338, -78901234} assert(C.call_10i(unpack(args)) == sum(args)) where `sum` is a function that sum elements in a passed table. (Or even calculate RHS once and use it and doesn't depend on calculations in runtime.) Same comment for other similar tests. > + assert(C.call_10f(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x123456, 338, -789012.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x123456+338-789012.75) > + end > + assert(C.call_10d(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x12345678, 338, -78901234.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x12345678+338-78901234.75) > +end > > -do > +do --- call pointer arg > local a = ffi.new("int[10]", -42) > assert(C.call_p_i(a) == -42+1) > assert(tonumber(ffi.cast("intptr_t", C.call_p_p(a+3))) == tonumber(ffi.cast("intptr_t", a+4))) > assert(C.call_pp_i(a+8, a+5) == 3) > end > > --- vararg > -assert(C.call_ividi(-42, ffi.new("int", 17), 12.5, ffi.new("int", 131)) == -42+17+12.5+131) > +do --- vararg > + assert(C.call_ividi(-42, ffi.new("int", 17), 12.5, ffi.new("int", 131)) == -42+17+12.5+131) > +end > > -- complex > -if pcall(function() return C.call_dd_cd end) then > - do > - local c = C.call_dd_cd(12.5, -3.25) > - assert(c.re == 12.5 and c.im == -3.25*2) > - end > - do > - local c1 = ffi.new("complex", 12.5, -3.25) > - local cz = C.call_cd(c1) > - assert(cz.re == 12.5+1 and cz.im == -3.25-2) > - end > - do > - local c1 = ffi.new("complex", 12.5, -3.25) > - local c2 = ffi.new("complex", -17.125, 100.625) > - local cz = C.call_cdcd(c1, c2) > - assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) > - end > +do --- dd_cd -windows > + local c = C.call_dd_cd(12.5, -3.25) > + assert(c.re == 12.5 and c.im == -3.25*2) > +end > +do --- cd -windows > + local c1 = ffi.new("complex", 12.5, -3.25) > + local cz = C.call_cd(c1) > + assert(cz.re == 12.5+1 and cz.im == -3.25-2) > +end > +do --- cdcd -windows > + local c1 = ffi.new("complex", 12.5, -3.25) > + local c2 = ffi.new("complex", -17.125, 100.625) > + local cz = C.call_cdcd(c1, c2) > + assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) > +end > > - do > - local c = C.call_ff_cf(12.5, -3.25) > - assert(c.re == 12.5 and c.im == -3.25*2) > - end > - do > - local c1 = ffi.new("complex float", 12.5, -3.25) > - local cz = C.call_cf(c1) > - assert(cz.re == 12.5+1 and cz.im == -3.25-2) > - end > - do > - local c1 = ffi.new("complex float", 12.5, -3.25) > - local c2 = ffi.new("complex float", -17.125, 100.625) > - local cz = C.call_cfcf(c1, c2) > - assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) > - end > +do --- ff_cf -windows > + local c = C.call_ff_cf(12.5, -3.25) > + assert(c.re == 12.5 and c.im == -3.25*2) > +end > +do --- cf -windows > + local c1 = ffi.new("complex float", 12.5, -3.25) > + local cz = C.call_cf(c1) > + assert(cz.re == 12.5+1 and cz.im == -3.25-2) > +end > +do --- cfcf -windows > + local c1 = ffi.new("complex float", 12.5, -3.25) > + local c2 = ffi.new("complex float", -17.125, 100.625) > + local cz = C.call_cfcf(c1, c2) > + assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) > end > > -- structs > -do > +do --- s_ii > local s1 = ffi.new("s_ii", -42, 17) > local sz = C.call_sii(s1) > assert(s1.x == -42 and s1.y == 17) > assert(sz.x == -42 and sz.y == 17) > end > > -do > +do --- s_jj > local s1 = ffi.new("s_jj", 0x123456789abcdef0LL, -0x789abcde99887766LL) > local sz = C.call_sjj(s1) > assert(s1.x == 0x123456789abcdef0LL) > @@ -156,28 +159,28 @@ do > assert(sz.y == -0x789abcde99887766LL) > end > > -do > +do --- s_ff > local s1 = ffi.new("s_ff", 12.5, -3.25) > local sz = C.call_sff(s1) > assert(s1.x == 12.5 and s1.y == -3.25) > assert(sz.x == 12.5 and sz.y == -3.25) > end > > -do > +do --- s_dd > local s1 = ffi.new("s_dd", 12.5, -3.25) > local sz = C.call_sdd(s1) > assert(s1.x == 12.5 and s1.y == -3.25) > assert(sz.x == 12.5 and sz.y == -3.25) > end > > -do > +do --- s_8i > local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) > local sz = C.call_s8i(s1) > assert(s1.a+s1.b+s1.c+s1.d+s1.e+s1.f+s1.g+s1.h == -42+17+12345+9987-100+11+51+0x12345678) > assert(sz.a+sz.b+sz.c+sz.d+sz.e+sz.f+sz.g+sz.h == -42+17+12345+9987-100+11+51+0x12345678) > end > > -do > +do --- s_ii s_ii > local s1 = ffi.new("s_ii", -42, 17) > local s2 = ffi.new("s_ii", 0x12345, -98765) > local sz = C.call_siisii(s1, s2) > @@ -186,7 +189,7 @@ do > assert(sz.x == -42+0x12345 and sz.y == 17-98765) > end > > -do > +do --- s_ff s_ff > local s1 = ffi.new("s_ff", 12.5, -3.25) > local s2 = ffi.new("s_ff", -17.125, 100.625) > local sz = C.call_sffsff(s1, s2) > @@ -195,7 +198,7 @@ do > assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > end > > -do > +do --- s_dd s_dd > local s1 = ffi.new("s_dd", 12.5, -3.25) > local s2 = ffi.new("s_dd", -17.125, 100.625) > local sz = C.call_sddsdd(s1, s2) > @@ -204,7 +207,7 @@ do > assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > end > > -do > +do --- s_8i s_8i > local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) > local s2 = ffi.new("s_8i", 99, 311, 98765, -51, 312, 97, 17, 0x44332211) > local sz = C.call_s8is8i(s1, s2) > @@ -215,7 +218,7 @@ do > assert(sz.h == 0x12345678+0x44332211) > end > > -do > +do --- is8ii > local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) > local sz = C.call_is8ii(19, s1, -51) > assert(s1.a+s1.b+s1.c+s1.d+s1.e+s1.f+s1.g+s1.h == -42+17+12345+9987-100+11+51+0x12345678) > @@ -225,42 +228,41 @@ do > end > > -- target-specific > -if jit.arch == "x86" then > +do --- fastcall void int double +x86 > assert(C.fastcall_void() == 1) > assert(C.fastcall_i(-42) == -41) > assert(C.fastcall_ii(-42, 17) == -42+17) > assert(C.fastcall_iii(-42, 17, 139) == -42+17+139) > assert(tonumber(C.fastcall_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) > assert(C.fastcall_dd(12.5, -3.25) == 12.5-3.25) > +end > > - do > - local a = ffi.new("int[10]", -42) > - assert(C.fastcall_pp_i(a+8, a+5) == 3) > - end > - > - do > - local s1 = ffi.new("s_ii", -42, 17) > - local s2 = ffi.new("s_ii", 0x12345, -98765) > - local sz = C.fastcall_siisii(s1, s2) > - assert(s1.x == -42 and s1.y == 17) > - assert(s2.x == 0x12345 and s2.y == -98765) > - assert(sz.x == -42+0x12345 and sz.y == 17-98765) > - end > +do --- fastcall pp_i +x86 > + local a = ffi.new("int[10]", -42) > + assert(C.fastcall_pp_i(a+8, a+5) == 3) > +end > > - do > - local s1 = ffi.new("s_dd", 12.5, -3.25) > - local s2 = ffi.new("s_dd", -17.125, 100.625) > - local sz = C.fastcall_sddsdd(s1, s2) > - assert(s1.x == 12.5 and s1.y == -3.25) > - assert(s2.x == -17.125 and s2.y == 100.625) > - assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > - end > +do --- fastcall s_ii s_ii +x86 > + local s1 = ffi.new("s_ii", -42, 17) > + local s2 = ffi.new("s_ii", 0x12345, -98765) > + local sz = C.fastcall_siisii(s1, s2) > + assert(s1.x == -42 and s1.y == 17) > + assert(s2.x == 0x12345 and s2.y == -98765) > + assert(sz.x == -42+0x12345 and sz.y == 17-98765) > +end > > - if jit.os == "Windows" then > - assert(C.stdcall_i(-42) == -41) > - assert(C.stdcall_ii(-42, 17) == -42+17) > - assert(C.stdcall_dd(12.5, -3.25) == 12.5-3.25) > - assert(C.stdcall_ff(12.5, -3.25) == 12.5-3.25) > - end > +do --- fastcall s_dd s_dd +x86 > + local s1 = ffi.new("s_dd", 12.5, -3.25) > + local s2 = ffi.new("s_dd", -17.125, 100.625) > + local sz = C.fastcall_sddsdd(s1, s2) > + assert(s1.x == 12.5 and s1.y == -3.25) > + assert(s2.x == -17.125 and s2.y == 100.625) > + assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > end > > +do --- stdcall +x86 +windows > + assert(C.stdcall_i(-42) == -41) > + assert(C.stdcall_ii(-42, 17) == -42+17) > + assert(C.stdcall_dd(12.5, -3.25) == 12.5-3.25) > + assert(C.stdcall_ff(12.5, -3.25) == 12.5-3.25) > +end > diff --git a/test/LuaJIT-tests/lib/ffi/index b/test/LuaJIT-tests/lib/ffi/index > index 8d833107..599a0182 100644 > --- a/test/LuaJIT-tests/lib/ffi/index > +++ b/test/LuaJIT-tests/lib/ffi/index > @@ -4,6 +4,7 @@ copy_fill.lua > err.lua > ffi_arith_ptr.lua > ffi_bitfield.lua > +ffi_call.lua > istype.lua > jit_array.lua > jit_complex.lua
next prev parent reply other threads:[~2024-01-23 9:32 UTC|newest] Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-01-19 11:32 [Tarantool-patches] [PATCH luajit 00/25] More tests from LuaJIT-tests, part 1 Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 01/25] test: prepare lauxilarily libs for LuaJIT-tests Sergey Kaplun via Tarantool-patches 2024-01-23 9:10 ` Sergey Bronnikov via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 02/25] test: separate LuaJIT helpers from ffi_util.inc Sergey Kaplun via Tarantool-patches 2024-01-23 9:17 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 12:35 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 03/25] test: enable <ffi_arith_ptr.lua> in LuaJIT-tests Sergey Kaplun via Tarantool-patches 2024-01-23 9:21 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 13:10 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 04/25] test: enable <ffi_bitfield.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 05/25] test: enable <ffi_call.lua> " Sergey Kaplun via Tarantool-patches 2024-01-23 9:32 ` Sergey Bronnikov via Tarantool-patches [this message] 2024-01-23 12:46 ` Sergey Kaplun via Tarantool-patches 2024-01-24 11:05 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 06/25] test: enable <ffi_callback.lua> " Sergey Kaplun via Tarantool-patches 2024-01-23 9:36 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 12:01 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 12:58 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 07/25] test: enable <ffi_const.lua> " Sergey Kaplun via Tarantool-patches 2024-01-23 9:38 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 11:59 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 12:52 ` Sergey Kaplun via Tarantool-patches 2024-01-23 12:49 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 08/25] test: enable <ffi_convert.lua> " Sergey Kaplun via Tarantool-patches 2024-01-23 9:39 ` Sergey Bronnikov via Tarantool-patches 2024-01-23 12:51 ` Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 09/25] test: enable <ffi_enum.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 10/25] test: enable <ffi_gcstep_recursive.lua> Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 11/25] test: enable <ffi_jit_arith.lua> in LuaJIT-tests Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 12/25] test: enable <ffi_jit_call.lua> " Sergey Kaplun via Tarantool-patches 2024-01-24 14:43 ` Sergey Bronnikov via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 13/25] test: enable <ffi_jit_conv.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 14/25] test: enable <ffi_lex_number.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 15/25] test: enable <ffi_metatype.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 16/25] test: enable <ffi_new.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 17/25] test: enable <ffi_parse_array.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 18/25] test: enable <ffi_parse_basic.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 19/25] test: enable <ffi_parse_cdef.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 20/25] test: enable <ffi_parse_struct.lua> LuaJIT test Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 21/25] test: enable <ffi_tabov.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 22/25] test: enable <lightud.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 23/25] test: enable <api_call.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 24/25] test: enable <catch_wrap.lua> " Sergey Kaplun via Tarantool-patches 2024-01-19 11:32 ` [Tarantool-patches] [PATCH luajit 25/25] test: enable <catch_cpp.lua> " Sergey Kaplun via Tarantool-patches 2024-01-23 9:01 ` [Tarantool-patches] [PATCH luajit 00/25] More tests from LuaJIT-tests, part 1 Sergey Bronnikov via Tarantool-patches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=ea276cc9-4bcb-4cd2-83fd-a94096e3bf18@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=m.kokryashkin@tarantool.org \ --cc=sergeyb@tarantool.org \ --cc=skaplun@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH luajit 05/25] test: enable <ffi_call.lua> in LuaJIT-tests' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox