diff --git a/src/core/stuff.c b/src/core/stuff.c index 9075266b..a6de2b02 100644 --- a/src/core/stuff.c +++ b/src/core/stuff.c @@ -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>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; diff --git a/test/README.md b/test/README.md index faa9f2c2..1c48dcc7 100644 --- a/test/README.md +++ b/test/README.md @@ -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 ``` \ No newline at end of file diff --git a/test/equal.bqn b/test/equal.bqn index c8e7532d..54aaca1a 100644 --- a/test/equal.bqn +++ b/test/equal.bqn @@ -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