summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordzaima <dzaimagit@gmail.com>2024-04-04 03:47:36 +0300
committerdzaima <dzaimagit@gmail.com>2024-04-04 03:54:55 +0300
commit3870189f85e38478a6e0d3101f677dd5744ec721 (patch)
treee9776d076c9df7a7f12c016973c5151a77c24f6f
parenta75522c738e1a16fa756a1247766de2cbd070feb (diff)
fix 3‿3⍒"a" & "aa"⍒3‿3
-rw-r--r--src/builtins/grade.h15
-rw-r--r--test/cases/prims.bqn2
2 files changed, 11 insertions, 6 deletions
diff --git a/src/builtins/grade.h b/src/builtins/grade.h
index 7890d80d..605c50cd 100644
--- a/src/builtins/grade.h
+++ b/src/builtins/grade.h
@@ -416,7 +416,10 @@ B GRADE_CAT(c2)(B t, B w, B x) {
B r; Arr* ra;
- if (wia==0 | xia==0) goto zeroes_done;
+ if (wia==0 | xia==0) {
+ ra = allZeroes(xia);
+ goto copysh_done;
+ }
if (wia==1) {
B c = IGet(w, 0);
if (LIKELY(we<el_B & xe<el_B)) {
@@ -502,11 +505,14 @@ B GRADE_CAT(c2)(B t, B w, B x) {
w=toI32Any(w); x=toI32Any(x);
#endif
} else {
- ra = reshape_one(xia, m_f64(wia));
+ ra = GRADE_UD(reshape_one(xia, m_f64(wia)), allZeroes(xia));
goto copysh_done;
}
} else { // w is character
- if (elNum(xe)) goto zeroes_done;
+ if (elNum(xe)) {
+ ra = GRADE_UD(allZeroes(xia), reshape_one(xia, m_f64(wia)));
+ goto copysh_done;
+ }
we = el_c32;
w=toC32Any(w); x=toC32Any(x);
@@ -552,9 +558,6 @@ B GRADE_CAT(c2)(B t, B w, B x) {
decG(w);decG(x);
return r;
- zeroes_done:;
- ra = allZeroes(xia);
-
copysh_done:;
r = taga(arr_shCopy(ra, x));
goto done;
diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn
index ecaa9d25..307a34be 100644
--- a/test/cases/prims.bqn
+++ b/test/cases/prims.bqn
@@ -330,6 +330,8 @@ w←1‿1⥊1 ⋄ x←2⥊1 ⋄ w‿x <¨↩ ⋄ {! (∾⟨•Repr𝕩,": Expe
# 𝕨⍋𝕩
!"⍋: 𝕨 must be sorted" % a←-¨ ∧⋈¨ ↕10 ⋄ a⍋⋈¨↕10
+⍷∘(⥊¨)⊸({! (𝕨⍋𝕩) ≡ (≢𝕩)⥊ (≠𝕨)×0≥𝕨 •Cmp○⊑ 𝕩}⌜) ⟨3, <3, 10⥊3, 'a', <'a', 10⥊'a'⟩
+⍷∘(⥊¨)⊸({! (𝕨⍒𝕩) ≡ (≢𝕩)⥊ (≠𝕨)×0≤𝕨 •Cmp○⊑ 𝕩}⌜) ⟨3, <3, 10⥊3, 'a', <'a', 10⥊'a'⟩
# 𝕨|𝕩
{x←2⥊𝕨|𝕩 ⋄ ! x •internal.EEqual 𝕨‿𝕨|𝕩‿𝕩 ⋄ ! x •internal.EEqual 𝕨|𝕩‿𝕩}⌜˜ ⍷∧∾⟜- ⟨π, ∞, 0÷0, 0.5, 0.1⟩∾(↕10)∾⥊(¯4+↕9)+⌜2⋆7‿8‿15‿31‿32