From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 663B6A6B9EE; Thu, 1 Feb 2024 18:58:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 663B6A6B9EE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1706803105; bh=nKOajjJIczY/cV6O69eEAprkmywN/yutD5HHxEiWRvY=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=rawbOf788Iq7TdtxhQdnPg0ycK4FPJrQHdjYY8nTg8nh1jl+rrfJQKwF4GBm1/4Fw JndQK7SqfVO3Mj5ZARfc9C2+dw7iuFrFiPdtqgIGjlQiygl7a2Vt8RtuXkAYW2aqQY /7uc6W07X4qgY2sVRVKtPrwjGIRWs5OOU4f49jQk= Received: from smtp55.i.mail.ru (smtp55.i.mail.ru [95.163.41.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 11076A6B9EE for ; Thu, 1 Feb 2024 18:58:24 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 11076A6B9EE Received: by smtp55.i.mail.ru with esmtpa (envelope-from ) id 1rVZSJ-00000009Woi-00yd; Thu, 01 Feb 2024 18:58:23 +0300 Message-ID: <620839b2-26a8-446d-83d8-e053c4cc61e6@tarantool.org> Date: Thu, 1 Feb 2024 18:58:22 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Sergey Kaplun , Maxim Kokryashkin Cc: tarantool-patches@dev.tarantool.org References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9010253A383FA2A75E0FEDFA0F594E2647EC31D07CE529F71182A05F5380850409695EF6551DA53395D1BE6A8D71B10A5586EDE26E9206277BBCBD0CDED06F3527B9585C59A2DDEF7 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE70C5E0F71D77D667BEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637FB2D77E6174520AE8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8061D499902664D0D8ED61FAEB93AFAC44B6243D4A1C01116CC7F00164DA146DAFE8445B8C89999728AA50765F7900637BA939FD1B3BAB99B389733CBF5DBD5E9C8A9BA7A39EFB766F5D81C698A659EA7CC7F00164DA146DA9985D098DBDEAEC8D2DCF9CF1F528DBCF6B57BC7E6449061A352F6E88A58FB86F5D81C698A659EA73AA81AA40904B5D9A18204E546F3947C5E3BF8C76DC23F749735652A29929C6C4AD6D5ED66289B523666184CF4C3C14F6136E347CC761E07725E5C173C3A84C3FA896608BF009721BA3038C0950A5D36B5C8C57E37DE458B330BD67F2E7D9AF16D1867E19FE14079C09775C1D3CA48CFE478A468B35FE7671DD303D21008E298D5E8D9A59859A8B6B372FE9A2E580EFC725E5C173C3A84C3E83E68DE7309FD8D35872C767BF85DA2F004C90652538430E4A6367B16DE6309 X-C1DE0DAB: 0D63561A33F958A569139919D3E461655002B1117B3ED6968FA7EA1F135337880E58516B1639A14B823CB91A9FED034534781492E4B8EEAD73D4B72E5887FF4D X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF5C8EC375B653BDEE5C5DE5D1FEA72127F4918808CA8B44A6532CB1DB98CB09B4025CA78FE36D2257BAF4CF3B87E910B1F98052A4811103805CF42C0FC98C82C014241044414FA7E85F4332CA8FE04980913E6812662D5F2AB9AF64DB4688768036DF5FE9C0001AF333F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojKdLLj0Q7SP8/EteiPSBftQ== X-Mailru-Sender: C4F68CFF4024C8867DFDF7C7F258845832252F498F2F547D364022C9811FBA4E32372F44E0749CD12D9DB01C8C6151B0645D15D82EE4B272BD6E4642A116CA93524AA66B5ACBE6721EF430B9A63E2A504198E0F3ECE9B5443453F38A29522196 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH v2 luajit 06/26] test: enable in LuaJIT-tests X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Bronnikov via Tarantool-patches Reply-To: Sergey Bronnikov Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hi, Sergey thanks for the patch! LGTM with minor comment below On 1/29/24 13:45, 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 . 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 too much "with" for my taste :) feel free to ignore Thanks for reformatting testcases, much more readable now. > 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 | 185 +++++++++++++------------ > test/LuaJIT-tests/lib/ffi/index | 1 + > 2 files changed, 97 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..0844b686 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,92 @@ 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 --- 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 --- 10 ints, 10 floats, 10 doubles > + 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) > + 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 --- pointers > 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 --- complex double, 2 double args -windows > + local c = C.call_dd_cd(12.5, -3.25) > + assert(c.re == 12.5 and c.im == -3.25*2) > +end > +do --- complex double, 1 complex arg -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 --- complex double, 2 complex args -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 --- complex float, 2 float args -windows > + local c = C.call_ff_cf(12.5, -3.25) > + assert(c.re == 12.5 and c.im == -3.25*2) > +end > +do --- complex float, 1 complex float arg -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 --- complex float, 2 complex float args -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 --- struct {int; int;} arg, return struct {int; int;} > 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 --- struct {int64_t; int64_t;} arg, return struct {int64_t; int64_t;} > local s1 = ffi.new("s_jj", 0x123456789abcdef0LL, -0x789abcde99887766LL) > local sz = C.call_sjj(s1) > assert(s1.x == 0x123456789abcdef0LL) > @@ -156,28 +164,28 @@ do > assert(sz.y == -0x789abcde99887766LL) > end > > -do > +do --- struct {float; float;} arg, return struct {float; float;} > 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 --- struct {double; double;} arg, return struct {double; double;} > 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 --- struct composed of 8 ints arg, same result > 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 --- 2 struct {int; int;} args, return struct {int; int;} > 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 +194,7 @@ do > assert(sz.x == -42+0x12345 and sz.y == 17-98765) > end > > -do > +do --- 2 struct {float; float;} args, return struct {float; float;} > 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 +203,7 @@ do > assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > end > > -do > +do --- 2 struct {double; double;} args, return struct {double; double;} > 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 +212,7 @@ do > assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) > end > > -do > +do --- 2 struct composed of 8 ints args, same struct in result > 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 +223,7 @@ do > assert(sz.h == 0x12345678+0x44332211) > end > > -do > +do --- int, struct composed of 8 ints, int > 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 +233,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 2 pointer args +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 2 struct {int; int;} args +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 2 struct {double; double;} args +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