fix •internal.ListVariations on a fillarr of floats

This commit is contained in:
dzaima 2025-05-26 03:32:06 +03:00
parent 3ab5c87a76
commit cbc1ef397b
2 changed files with 20 additions and 2 deletions

View File

@ -113,8 +113,22 @@ B listVariations_c2(B t, B w, B x) {
if (xe==el_i8 ) { i8* xp = i8any_ptr (x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
else if (xe==el_i16) { i16* xp = i16any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
else if (xe==el_i32) { i32* xp = i32any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; } }
else if (xe==el_f64) { f64* xp = f64any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; if(xp[i]!=(i32)xp[i]) goto onlyF64; } }
else for (usz i = 0; i < xia; i++) { B c = GetU(x, i); if (!isF64(c)) goto noSpec; if (c.f>max) max=c.f; if (c.f<min) min=c.f; }
else if (xe==el_f64) { f64* xp = f64any_ptr(x); for (usz i = 0; i < xia; i++) { if (xp[i]>max) max=xp[i]; if (xp[i]<min) min=xp[i]; if(!q_fi32(xp[i])) goto onlyF64; } }
else {
bool notFloat = false;
for (usz i = 0; i < xia; i++) {
B c = GetU(x, i);
if (!isF64(c)) goto noSpec;
if (!q_fi32(o2fG(c))) {
notFloat=true;
} else {
i32 v = o2iG(c);
if (v>max) max=v;
if (v<min) min=v;
}
}
if (notFloat) goto onlyF64;
}
ai8 = min==(i8 )min && max==(i8 )max;
ai16 = min==(i16)min && max==(i16)max;
ai32 = min==(i32)min && max==(i32)max;

View File

@ -387,6 +387,10 @@ Str ← {!=𝕩 ⋄ !×≠𝕩 ⋄ ! ∧´2=•Type¨𝕩} ⋄ Str •platform.o
! 0123456788123456788 {•internal.ElType 𝕩 •internal.Variation }¨ var
# TODO test •internal.ListVariations
)
%USE eqvar LV"i"LV •internal.ListVariations _eqvar π×10 %% "Af64","Sf64","Af64Inc","Sf64Inc","Ah","Sh","AhInc","ShInc","Af","Sf","AfInc","SfInc"
%USE eqvar LV"i"LV •internal.ListVariations _eqvar (π×10){} %% "Ah","Sh","AhInc","ShInc","Af","Sf","AfInc","SfInc"
%USE eqvar LV"i"LV •internal.ListVariations _eqvar 1000 %% "Ai16","Si16","Ai16Inc","Si16Inc","Ai32","Si32","Ai32Inc","Si32Inc","Af64","Sf64","Af64Inc","Sf64Inc","Ah","Sh","AhInc","ShInc","Af","Sf","AfInc","SfInc"
%USE eqvar LV"i"LV •internal.ListVariations _eqvar 10010 %% "Ab","AbInc","Ai8","Si8","Ai8Inc","Si8Inc","Ai16","Si16","Ai16Inc","Si16Inc","Ai32","Si32","Ai32Inc","Si32Inc","Af64","Sf64","Af64Inc","Sf64Inc","Ah","Sh","AhInc","ShInc","Af","Sf","AfInc","SfInc"
# •internal.Keep
•internal.Keep 10 %% 10