native ⋈⁼ & ⌾⋈

plus some more undo & under tests
This commit is contained in:
dzaima 2024-08-14 05:17:18 +03:00
parent ae0d392d43
commit 920a89f019
3 changed files with 48 additions and 0 deletions

View File

@ -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;
}

View File

@ -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× 012𝕩+3) 10×(𝕩) a34560}¨ ¯5+10
{!(a×1+9׬012𝕩+3) 10×(𝕩) a34560}¨ ¯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) 1010100 %% 28292021222324252627
(12) 5525 %% 1552223242021234017895612131410111718191516

16
test/cases/undo.bqn Normal file
View File

@ -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