fix generic squeeze case

This commit is contained in:
dzaima 2022-04-04 21:35:45 +03:00
parent ea5abeff18
commit 6bce21b55c
3 changed files with 9 additions and 10 deletions

View File

@ -608,17 +608,16 @@ B num_squeeze(B x) {
u32 or = 0; // using bitwise or as an approximate ⌈´
switch (xe) { default: UD;
case el_bit: goto r_x;
case el_i8: { i8* xp = i8any_ptr (x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
case el_i16: { i16* xp = i16any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
case el_i32: { i32* xp = i32any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]&~1; or|= ((u32)c) ^ (u32)(c>>31); } goto r_or; }
case el_i8: { i8* xp = i8any_ptr (x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
case el_i16: { i16* xp = i16any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
case el_i32: { i32* xp = i32any_ptr(x); for (; i < ia; i++) { i32 c = xp[i]; or|= ((u32)c & ~1) ^ (u32)(c>>31); } goto r_or; }
case el_f64: {
f64* xp = f64any_ptr(x);
for (; i < ia; i++) {
f64 cf = xp[i];
i32 c = (i32)cf;
if (c!=cf) goto r_x; // already f64
c&= ~1;
or|= ((u32)c) ^ (u32)(c>>31);
or|= ((u32)c & ~1) ^ (u32)(c>>31);
}
goto r_or;
}
@ -632,8 +631,8 @@ B num_squeeze(B x) {
while (i<ia) if (!isF64(xp[i++])) goto r_x;
goto r_f64;
}
i32 c = o2iu(xp[i]) & ~1;
or|= ((u32)c) ^ (u32)(c>>31);
i32 c = o2iu(xp[i]);
or|= ((u32)c & ~1) ^ (u32)(c>>31);
}
goto r_or;
}
@ -646,8 +645,7 @@ B num_squeeze(B x) {
goto r_f64;
}
i32 c = o2iu(cr);
i32 sgn = (u32)(c>>31);
or|= ((u32)c) ^ sgn;
or|= ((u32)c & ~1) ^ (u32)(c>>31);
}
r_or:
if (or==0) goto r_bit;

View File

@ -9,5 +9,5 @@ test/moreCfgs.sh path/to/mlochbaum/BQN // run "2+2" in a bunch of configurations
./BQN test/cmp.bqn // fuzz-test scalar comparison functions =≠<≤>≥
./BQN test/equal.bqn // fuzz-test 𝕨≡𝕩
./BQN test/bitcpy.bqn // fuzz-test bit_cpy; requires a CBQN build with -DTEST_BITCPY
./BQN test/squeeze.bqn // fuzz-test bit_cpy; requires a CBQN build with -DEEQUAL_NEGZERO
./BQN test/squeeze.bqn // fuzz-test squeezing; requires a CBQN build with -DEEQUAL_NEGZERO
```

View File

@ -1,3 +1,4 @@
# make o3n-singeli && ./BQN test/equal.bqn
ListVariations, ClearRefs, Variation, Squeeze, Info •internal
u 100×(•UnixTime+1|100וMonoTime)@
# u ↩ 123