From 920a89f0196e2e029ea58f46ee04b8214797c7e8 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 14 Aug 2024 05:17:18 +0300 Subject: [PATCH] =?UTF-8?q?native=20=E2=8B=88=E2=81=BC=20&=20=E2=8C=BE?= =?UTF-8?q?=E2=8B=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit plus some more undo & under tests --- src/builtins/sfns.c | 10 ++++++++++ test/cases/under.bqn | 22 ++++++++++++++++++++++ test/cases/undo.bqn | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 test/cases/undo.bqn diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index 69b28400..06134304 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -1427,9 +1427,17 @@ NOINLINE B enclose_im(B t, B x) { return r; } +NOINLINE B pair_im(B t, B x) { + if (isAtm(x) || RNK(x)!=1 || IA(x)!=1) thrM("⋈⁼: Argument wasn't a length-1 list"); + B r = IGet(x, 0); + dec(x); + return r; +} + B reverse_ucw(B t, B o, B w, B x) { return reverse_ix(m_f64(0), w, c1(o, reverse_c2(t, inc(w), x))); } B reverse_uc1(B t, B o, B x) { return C1(reverse, c1(o, reverse_c1(t, x))); } B enclose_uc1(B t, B o, B x) { return enclose_im(m_f64(0), c1(o, m_unit(x))); } +B pair_uc1(B t, B o, B x) { return pair_im(m_f64(0), c1(o, m_vec1(x))); } void sfns_init(void) { c(BFn,bi_pick)->uc1 = pick_uc1; @@ -1444,4 +1452,6 @@ void sfns_init(void) { c(BFn,bi_drop)->ucw = drop_ucw; c(BFn,bi_lt)->im = enclose_im; c(BFn,bi_lt)->uc1 = enclose_uc1; + c(BFn,bi_pair)->im = pair_im; + c(BFn,bi_pair)->uc1 = pair_uc1; } diff --git a/test/cases/under.bqn b/test/cases/under.bqn index c9736060..a1cf6531 100644 --- a/test/cases/under.bqn +++ b/test/cases/under.bqn @@ -108,3 +108,25 @@ n←500 ⋄ a←↕n ⋄ i←(-n)+↕2×n ⋄ r←⌽(2×n)⥊a ⋄ ! (⌽a) ≡ •internal.Keep⌾(¯5⊸↓) ↕4 %% ↕4 {!(a×1+9× 0‿1‿2∊𝕩+↕3) ≡ 10⊸×⌾(𝕩⊸↓) a←3‿4‿5⥊↕60}¨ ¯5+↕10 {!(a×1+9׬0‿1‿2∊𝕩+↕3) ≡ 10⊸×⌾(𝕩⊸↑) a←3‿4‿5⥊↕60}¨ ¯3+↕7 + +# < +⊢⌾< 4 %% 4 +(<5)⌾< 4 %% 5 +{<"cd"}⌾< "ab" %% "cd" +!"<⁼: Argument wasn't a rank 0 array" % 4⌾< "ab" +!"<⁼: Argument wasn't a rank 0 array" % {⇐}⌾< "ab" +!"<⁼: Argument wasn't a rank 0 array" % ≍⌾< 2 + +# ⋈ +⊢⌾⋈ 4 %% 4 +(⋈5)⌾⋈ 4 %% 5 +{⋈"cd"}⌾⋈ "ab" %% "cd" +!"⋈⁼: Argument wasn't a length-1 list" % 4⌾⋈ "ab" +!"⋈⁼: Argument wasn't a length-1 list" % {⇐}⌾⋈ "ab" +!"⋈⁼: Argument wasn't a length-1 list" % ≍⌾⋈ 2 +!"⋈⁼: Argument wasn't a length-1 list" % (<4)⌾⋈ 2 + +# k⊸⌽ +!"⌽⁼: 𝕩 must have rank at least 1" % 1⌾(2⊸⌽) ↕10 +⊏⌾(2⊸⌽) 10‿10⥊↕100 %% 28‿29‿20‿21‿22‿23‿24‿25‿26‿27 +≍⌾(1‿2⊸⌽) 5‿5⥊↕25 %% 1‿5‿5⥊22‿23‿24‿20‿21‿2‿3‿4‿0‿1‿7‿8‿9‿5‿6‿12‿13‿14‿10‿11‿17‿18‿19‿15‿16 diff --git a/test/cases/undo.bqn b/test/cases/undo.bqn new file mode 100644 index 00000000..8ca0280a --- /dev/null +++ b/test/cases/undo.bqn @@ -0,0 +1,16 @@ +<⁼ <"foo" %% "foo" +!"<⁼: Argument wasn't a rank 0 array" % <⁼ 4 +!"<⁼: Argument wasn't a rank 0 array" % <⁼ ↕0 +!"<⁼: Argument wasn't a rank 0 array" % <⁼ "f" + +⋈⁼ ⋈"foo" %% "foo" +⋈⁼ "f" %% 'f' +!"⋈⁼: Argument wasn't a length-1 list" % ⋈⁼ 4 +!"⋈⁼: Argument wasn't a length-1 list" % ⋈⁼ ↕0 +!"⋈⁼: Argument wasn't a length-1 list" % ⋈⁼ ≍"f" + +!"⌽: Argument cannot be a unit" % ⌽⁼ 0 +⌽⁼ ↕10 %% 9-↕10 + +!"⍉⁼: 𝕩 must not be an atom" % ⍉⁼ 3 +⍉⁼ <3 %% <3