summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordzaima <dzaimagit@gmail.com>2024-04-20 21:23:28 +0300
committerdzaima <dzaimagit@gmail.com>2024-04-20 21:24:51 +0300
commit5600bb189adbb704a4d36aea4a97ec6b118bb9cb (patch)
treeb37767ff41902833816c60a3637ab79f89019798
parentde529e483bcdda2ad571f37070d4a88ed98e9144 (diff)
fix ⟨1,2⋆62⟩/2⥊<⋈0
-rw-r--r--src/builtins/slash.c6
-rw-r--r--test/cases/prims.bqn2
2 files changed, 6 insertions, 2 deletions
diff --git a/src/builtins/slash.c b/src/builtins/slash.c
index ddc6200a..ce4a7deb 100644
--- a/src/builtins/slash.c
+++ b/src/builtins/slash.c
@@ -673,8 +673,10 @@ B slash_c2(B t, B w, B x) {
usz csz = arr_csz(x);
MAKE_MUT_INIT(r0, s*csz, TI(x,elType)); MUTG_INIT(r0);
SGetU(w)
- if (csz!=1) { usz ri=0; for (ux i=0; i<wia; i++) { usz c=o2s(GetU(w, i)); for(ux j=0;j<c;j++) { mut_copyG(r0, ri, x, i*csz, csz); ri+= csz; } } }
- else { SGetU(x) usz ri=0; for (ux i=0; i<wia; i++) { usz c=o2s(GetU(w, i)); if (c) { mut_fillG(r0, ri, GetU(x, i), c); ri+= c; } } }
+ B wc; usz ri=0;
+ if (csz!=1) { for (ux i=0; i<wia; i++) { if (!q_usz(wc=GetU(w,i))) goto pfree; usz c=o2sG(wc); for(ux j=0;j<c;j++) { mut_copyG(r0, ri, x, i*csz, csz); ri+= csz; } } }
+ else { SGetU(x) for (ux i=0; i<wia; i++) { if (!q_usz(wc=GetU(w,i))) goto pfree; usz c=o2sG(wc); if (c) { mut_fillG(r0, ri, GetU(x, i), c); ri+= c; } } }
+ if (0) { pfree: mut_pfree(r0, ri); expI_B(wc); }
Arr* ra = mut_fp(r0);
if (xr == 1) {
arr_shVec(ra);
diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn
index 0a6ae759..5d422dc1 100644
--- a/test/cases/prims.bqn
+++ b/test/cases/prims.bqn
@@ -84,6 +84,8 @@
!"𝕨/𝕩: Compound 𝕨 must have rank at most 1" % (1‿2⥊<↕4) / ↕4
!"𝕨/𝕩: 𝕨 must consist of natural numbers" % ⟨↕4, 1‿2‿3.5‿4⟩ / 4‿4⥊↕16
!"𝕨/𝕩: 𝕨 must consist of natural numbers" % ⟨↕4, 3.5⟩ / 4‿4⥊↕16
+!"Integer out of range: 4.611686018427388e18" % ⟨1,2⋆62⟩ / 2‿2⥊<⋈0
+!"Integer out of range: 4.611686018427388e18" % ⟨1,2⋆62⟩ / 2⥊<⋈0
⟨↕4, 0, ↕5⟩ / 4‿4‿5⥊@ %% 6‿0‿10⥊@
⟨↕4, 4⥊0, ↕5⟩ / 4‿4‿5⥊@ %% 6‿0‿10⥊@
1‿0‿2 / ⋈¨ ["ab","cd","ef"] %% ⋈¨ ["ab","ef","ef"]