relax documented RangeFn behavior to align with NEON impl

This commit is contained in:
dzaima 2025-03-12 02:00:48 +02:00
parent a6202c8ca6
commit e33b3b95ee
2 changed files with 8 additions and 3 deletions

View File

@ -34,7 +34,7 @@ typedef struct { EqFn fn; u8 data; } EqFnObj;
#define EQFN_GET(W_ELT, X_ELT) ({ u8 eqfn_i_ = EQFN_INDEX(W_ELT, X_ELT); (EqFnObj){.fn=eqFns[eqfn_i_], .data=eqFnData[eqfn_i_]}; })
#define EQFN_CALL(FN, W, X, L) (FN).fn(W, X, L, (FN).data) // check if L elements starting at a and b match; assumes L≥1
typedef bool (*RangeFn)(void* xp, i64* res, u64 len); // writes min,max in res, assumes len≥1; returns 0 and leaves res undefined if either any (floor(x)≠x or abs>2⋆53), or (x≠(i64)x)
typedef bool (*RangeFn)(void* xp, i64* res, u64 len); // assumes len≥1; if x has non-integers or values with absolute value >2⋆53, will return 0 or report min<-2⋆53 or max>2⋆53; else, writes min,max in res and returns 1
extern INIT_GLOBAL RangeFn getRange_fns[el_f64+1]; // limited to ≤el_f64
typedef void (*BitSelFn)(void*,u64*,u64,u64,u64);

View File

@ -1,6 +1,11 @@
# needs: -DTEST_RANGE
"basic test doesn't work; are you on a -DTEST_RANGE build?" ! 191 •internal.Temp 314159
%DEF invalid Invalid {··0: 1; se1: (s<-252) e>252}•internal.Temp
(091,10 ¯5¯31 ¯5¯3¯4¯4¯4¯4¯4{¯2,𝕩-3,1,¯2+𝕩}¨1+100) {expa𝕊𝕩: exp (!) •internal.Temp 𝕩•internal.Variation a} "Ai8""Ai16""Ai32""Af64"
T ! ·•internal.Temp "Ab"•internal.Variation {𝕊n: 111 T 𝕩1 001 T 𝕩0 01 {011 T (¬𝕨)(𝕩) n𝕨}¨(n>1) 2•rand.Range n}¨1+500
{! 02•internal.Temp (263)(𝕩) 100}¨ 10
263, 1.5, 0÷0 {! 02•internal.Temp 𝕨(𝕩) 200} 20
%USE invalid Invalid¨ 4, - 250, π×4, 10260 %% 0011
%USE invalid 263, 1.5, 0÷0 {𝕩!Invalid 𝕨(𝕩) 200} 20
%USE invalid p1+2-52, 1-2-53 {𝕩!Invalid 𝕩(10) 200}¨ , ¯∞, 0.1, ¯0.1 ((1p) × - 254+12) p × 270
{! 001 •internal.Temp 𝕩(𝕩0)100÷0}¨ 1+10