uCBQN/test/cases/cells.bqn
2025-07-04 21:01:17 +03:00

184 lines
15 KiB
BQN
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

%DEF var V•internal.Variation LV•internal.ListVariations CLR•internal.ClearRefs
%DEF tvar %USE var _tvar {F _𝕣 x: (CLR@) {F 𝕩 V x}¨ LV 𝕩; w F _𝕣 x: (CLR@) (LV 𝕨) {(𝕨 V w) F 𝕩 V x} LV 𝕩}
%DEF eqvar _eqvar•args
%DEF evar %USE tvar _evar {ok{} r𝕨 ok𝔽{𝕊: •CurrentError@} _tvar 𝕩 {okr? !"TEST FAIL: variation didn't error"; ("TEST FAIL: varying error messages" ! 1=)r (r)!0}}
%DEF eqerr %USE eqvar _eqerr {ok{} r𝕨 ok𝔽{𝕊: •CurrentError@} 𝕩 {okr? !"TEST FAIL: case didn't error"; ("TEST FAIL: varying error messages" ! 1=)r (r)!0}}
%DEF k _k {𝔽•internal.Keep}
%DEF pk _pk {𝔽•internal.PureKeep}
12 10 1 %% 11
1 10 12 %% 11
! 201200˘a20304024 ! 203040 a
! (2-1 {2-𝕩}1) 1010100
! (-21 {𝕩-2}1) 1010100
%USE k n1 {𝕊: (•Repr a) ! (n _kn)´ a((322'a'+26))¨ <˘ 2222•rand.Range 3}¨ 1000
%USE k n2 {𝕊: (•Repr a) ! (n _kn)´ a((322'a'+26))¨ <˘ 2222•rand.Range 3}¨ 1000
%USE k n3 {𝕊: (•Repr a) ! (n _kn)´ a((322'a'+26))¨ <˘ 2222•rand.Range 3}¨ 1000
%USE eqvar 1, 0÷0 1 _eqvar 1021010÷0 %% 100
%USE eqvar (10210÷0) 1 _eqvar 102101¯1÷0 %% 100
(10110÷0) 1 1011100÷0 %% 101000
{𝕊k: ! (3k {3𝕩}k) 222216}¨ ¯2+10
{𝕊k: ! (1k {1𝕩}k) 333381}¨ ¯2+10
!"˘: Result rank too large" % (02542)1˘ 021
!"⎉: Result rank too large" % (02542)1¯1 021
!"⎉: Result rank too large" % (1˜ 02042)50 1˜ 01002
!"𝔽⎉𝕘: Result rank too large (204 ≡ =𝕩, 200 ≡ =𝔽v)" % {𝕊:(2001)1}1 (2051)1
!"𝕨𝔽⎉𝕘𝕩: Argument frames don't agree (⟨3⟩ ≡ ≢𝕨, ⟨2⟩ ≡ ≢𝕩, common frame of 1 axes)" % "abc" 0 "ab"
!"𝕨𝔽˘𝕩: Argument frames don't agree (⟨3⟩ ≡ ≢𝕨, ⟨2⟩ ≡ ≢𝕩, common frame of 1 axes)" % "abc" ˘ "ab"
! ´{𝕊: ! ({𝕨𝕩}´) (<•rand.Range "ab",12,,0,"") ˜ (4•rand.Range) 1, {}, 'a', <'a', <{}, "ab", 0, ""}¨10000
# error cases that could be affected by special code
!"∧𝕩: 𝕩 cannot have rank 0" % ˘2
!"𝕩: 𝕩 cannot have rank 0" % ˘"a"
!"Expected non-negative integer, got ¯3" % 2¯3/1 620
!"𝕨/𝕩: Lengths of components of 𝕨 must match 𝕩 (3 ≠ 4)" % 123/˘4567
!"𝕨/𝕩: Simple 𝕨 must have rank 0 or 1 (2≡=𝕨)" % (2314) /˘ 2
!"𝕨/𝕩: Length of compound 𝕨 must be at most rank of 𝕩" % (<0)/˘(5)<"ab"
!"𝕨⊏𝕩: Indexing out-of-bounds (24∊𝕨, 4≡≠𝕩)" % 124144
!"𝕨⊏𝕩: Indexing out-of-bounds (4∊𝕨, 4≡≠𝕩)" % 1˜6424
!"𝕨⊏𝕩: 𝕨 must be an array of numbers or list of such (𝕨 contained character)" % 0@¯11 520.5
!"Expected integer, got ¯5.25" % ¯5.25˘424
!"𝕨⊏𝕩: Indexing out-of-bounds (1∊𝕨, 1≡≠𝕩)" % 001 ˘(˘) 10000×3
!"𝕨⊏𝕩: 𝕩 cannot be a unit" % 0˘5<"a"
!"𝕨⊏𝕩: 𝕩 cannot be a unit" % (30)˘3
!"Expected integer, got 0.1" % 0.1˘3515
!"𝕨⊑𝕩: 𝕩 must be a list when 𝕨 is a number (3‿4 ≡ ≢𝕩)" % 5 ˘ 234
!"𝕨⊑𝕩: 𝕩 must be a list when 𝕨 is a number (3‿4 ≡ ≢𝕩)" % 5 ˘ 2342
!"𝕨⊑𝕩: 𝕩 must be a list when 𝕨 is a number (3‿4 ≡ ≢𝕩)" % 0 2 2342
!">𝕩: Result rank too large (80 ≡ =𝕩, 205 ≡ =⊑𝕩)" % >80 (2001)<(2051)1
!"𝔽⎉𝕘: Result rank too large (195 ≡ =𝕩, 210 ≡ =𝔽v)" % >5 (2001)<(2051)1
!"𝕨∾𝕩: Lengths not matchable (⟨6⟩ ≡ ≢𝕨, 1‿1 ≡ ≢𝕩)" % ("abc""def")˘(3/)"a"
!"𝕨∾𝕩: Argument ranks must differ by 1 or less (0≡=𝕨, 2≡=𝕩)" % 1˘333
!"𝕨∾𝕩: Lengths not matchable (4‿2 ≡ ≢𝕨, 3‿3 ≡ ≢𝕩)" % (3424)˘3335
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (3‿4 ≡ ≢𝕨, 3‿3 ≡ ≢𝕩)" % (34)2 23318
!"≍𝕩: Result rank too large (255≡=𝕩)" % 0˜2551
!"shift: Lengths not matchable (⟨6⟩ ≡ ≢𝕨, 1‿1 ≡ ≢𝕩)" % ("abc""def")«˘(3/)"a"
!"shift: =𝕨 must be =𝕩 or ¯1+=𝕩 (0≡=𝕨, 2≡=𝕩)" % 1«˘222
!"»𝕩: 𝕩 cannot be a scalar" % »0 2316
!"⌽𝕩: 𝕩 cannot be a unit" % ˘10
!"Expected integer, got 1.5" % 1.5˘232
!"𝕨↑𝕩: 𝕨 must have rank at most 1 (1‿2 ≡ ≢𝕨)" % (12)˘232
!"𝕨↓𝕩: 𝕨 must have rank at most 1 (4‿2 ≡ ≢𝕨)" % (428)˘@
!"Integer out of range: 1e20" % 1e20˘31010
!"Expected number" % 34@˘34
!"Expected integer, got 0.5" % 0.5˘4312
!"↑𝕩: 𝕩 must have rank at least 1" % ˘2
!"↓𝕩: 𝕩 must have rank at least 1" % 0 210
!"⊐𝕩: 𝕩 cannot have rank 0" % ˘"abcd"
!"⊒𝕩: 𝕩 cannot have rank 0" % ˘"abcd"
!"∊𝕩: 𝕩 cannot have rank 0" % ˘"abcd"
!"𝕨⍋𝕩: 𝕨 must be sorted" % 021˘ 3412
!"𝕨𝔽`𝕩: Shape of 𝕨 must match the cell of 𝕩 (⟨2⟩ ≡ ≢𝕨, 2‿3 ≡ ≢𝕩)" % (221)+`˘2230.4
!"𝕨𝔽`𝕩: Shape of 𝕨 must match the cell of 𝕩 (⟨⟩ ≡ ≢𝕨, 3‿3 ≡ ≢𝕩)" % 2+`˘333
!"𝔽´𝕩: 𝕩 must be a list (3‿3 ≡ ≢𝕩)" % +´˘23318
!"𝕨𝔽´𝕩: 𝕩 must be a list (3‿3 ≡ ≢𝕩)" % 1+´˘23318
!"𝔽˝𝕩: 𝕩 must have rank at least 1" % +˝˘˘1010100
!"𝔽˝𝕩: 𝕩 must have rank at least 1" % ˝¯2 239
{˝˘ (×´) 2+𝕩}¨ 2345 %% (×´)¨ 23,212,2125,21256
{˝˘ (2+𝕩)<"hi"}¨ 2345 %% (<"hi")¨ 23,212,2125,21256
{˝¯2 (×´) 2+𝕩}¨ 345 %% (×´)¨ 234,2320,23206
%DEF tcc %USE pk %USE var _tcc_ { ! ´ (<𝕨 𝔽_pk𝕘'e' 𝕩) ¨ (𝕨 𝔽𝕘'e'V𝕩)¨ "i"LV𝕩}
%USE tcc 2, 20, ¯2, ¯20, 0 {𝕨 _tcc_ ¯1 𝕩 𝕨 _tcc_ ¯1 𝕩} <4, 5, 4520, 456120
%USE tcc , , , <, , , (0), (1), (2) {𝕎 _tcc_ ¯1 𝕩 𝕎 _tcc_ 1 𝕩 𝕎 _tcc_ 2 𝕩} <4, 5, 4520, 456120, 2345120, 1000, 0100, 0230, 23400
%USE tcc _tcc_ ¯1 428 1_tcc_ ¯1 428 _tcc_ ¯1 42 1_tcc_ ¯1 42
%USE tcc _tcc_ ¯1 428 1_tcc_ ¯1 428 _tcc_ ¯1 42 1_tcc_ ¯1 42
1˘ 02342 %% 0340 %!HEAPVERIFY
2˘ 02222 %% 0
¯1 23424 %% 23×4×2
¯2 23424 %% 234×6
¯3 23424 %% 23424
01 23424 %% 234×6
11 23424 %% 1+234×6
0 1010100 %% 1010100
%USE eqvar 0000 {𝕨˘𝕩}_eqvar ˘5 %% 544÷˜20
%USE eqvar 0¯10¯1 {𝕨˘𝕩}_eqvar ˘5 %% 544÷˜20
%USE eqvar 100¯3 {𝕨˘𝕩}_eqvar 102002000 %% 1021001973003975005977007979009971100119713001397150015971700179719001997
%USE eqvar 10050 {𝕨˘𝕩}_eqvar 102002000 %% 102100503002505004507006509008501100105013001250150014501700165019001850
%USE eqvar ¯1¯2¯3 {𝕨˘𝕩}_eqvar 880557 %% 83797877159158157239238237319318317399398397479478477210828180
1201¯11 23424 %% 23512013564579108911131412131517181617192122202123
1201¯12 23424 %% 2544567891011012345678910111617181920212223121314151617181920212223
!"𝕨⊏𝕩: Indexing out-of-bounds (1∊𝕨, 1≡≠𝕩)" % %USE evar 0¯11¯1 {𝕨˘𝕩}_evar ˘5
!"𝕨⊏𝕩: Indexing out-of-bounds (¯2∊𝕨, 1≡≠𝕩)" % %USE evar 0¯1¯2¯1 {𝕨˘𝕩}_evar ˘5
!"𝕨⊏𝕩: Indexing out-of-bounds (¯129∊𝕨, 128≡≠𝕩)" % %USE evar 10¯129 {𝕨˘𝕩}_evar 101281
!"𝕨⊏𝕩: Indexing out-of-bounds (128∊𝕨, 128≡≠𝕩)" % %USE evar 10128 {𝕨˘𝕩}_evar 101281
!"𝕨⊏𝕩: Indexing out-of-bounds (1∊𝕨, 1≡≠𝕩)" % %USE evar 1001 {𝕨˘𝕩}_evar 1011
!"𝕨⊏𝕩: Indexing out-of-bounds (1000∊𝕨, 3≡≠𝕩)" % %USE evar (31000) {𝕨˘𝕩}_evar 10031
!"𝕨⊏𝕩: Indexing out-of-bounds (1000∊𝕨, 4≡≠𝕩)" % %USE evar (41000) {𝕨˘𝕩}_evar 10041
!"𝕨⊏𝕩: Indexing out-of-bounds (1000∊𝕨, 8≡≠𝕩)" % %USE evar (81000) {𝕨˘𝕩}_evar 10081
!"𝕨⊏𝕩: Indexing out-of-bounds (100∊𝕨, 8≡≠𝕩)" % %USE evar (<100) {𝕨˘𝕩}_evar 10081
!"Integer out of range: 9e99" % %USE evar (<9e99) {𝕨˘𝕩}_evar 10081
12˘ 108100 %% (8×10) + 12
12˘ 1042100 %% (8×10) + [23,45]
12,1,0˘ 1042100 %% (8×10) + [32,54]
[21,45]˘ 108100 %% (8×10) + [21,45]
[11,01]˘ 1022100 %% (4×10) + 22223230123
%USE eqvar [213,457] {𝕨˘ 𝕩}_eqvar 108100 %% (8×10) + [213,457]
%USE eqvar [213,457] {𝕨1𝕩}_eqvar 348100 %% (348×12) + [213,457]
%USE eqvar [213,457] {𝕨˘ 𝕩}_eqvar 18100 %% [213,457]
%USE eqvar (<2) {𝕨˘𝕩}_eqvar 108100 %% 2 + 8×10
˘ 10110 %% 10
˘ 101330 %% 10330
˘ 1013260 %% 103260
¯2 4218 %% 428
¯2 421324 %% 42324
¯2 4213248 %% 423248
1 "foo" %% <"foo"
1 10 %% <10
!"≍⁼𝕩: Argument must have a leading axis of 1" % ˘ 1102
!"≍⁼𝕩: Argument must have a leading axis of 1" % ¯2 112111
!"≍⁼𝕩: Argument must have a leading axis of 1" % ¯2 1110
!"≍⁼𝕩: Argument must have a leading axis of 1" % 0 10
%USE eqvar (10051) ˘_eqvar 10071 %% 0=(100) |˜ 57
%USE eqvar ('a'+1005) ˘_eqvar 1007 %% 'a'0 +1 (100) |˜ 57
%USE eqvar 1(˘)_eqvar 10071 %% 1002 ( ¬2|200) 2/0=7|100
%USE eqvar 1e9(˘)_eqvar 10071 %% 1002 (1e9׬2|200) 2/0=7|100
%USE eqvar ˘ 1 _eqvar 10071 %% 1002 ( 2|200) 2/0=7|100
%USE eqvar ˘1e9 _eqvar 10071 %% 1002 (1e9× 2|200) 2/0=7|100
%USE eqvar ˘'!' _eqvar 10071 %% '!'•internal.Keep˘ 0=7|100
%USE eqvar ˘_eqvar˜ 339 %% 323012012345345678678
%USE eqvar (2345111) 2 _eqvar 234517 %% (2345111) •internal.PureKeep2 234517
!"𝕨𝔽˘𝕩: Argument frames don't agree (3‿4 ≡ ≢𝕨, 5‿4 ≡ ≢𝕩, common frame of 1 axes)" % (342) ˘ 542
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (⟨4⟩ ≡ ≢𝕨, ⟨5⟩ ≡ ≢𝕩)" % (342) ˘ 352
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (2‿2‿2 ≡ ≢𝕨, 2‿3‿2 ≡ ≢𝕩)" % (32222) ˘ 32322
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (4‿1 ≡ ≢𝕨, ⟨4⟩ ≡ ≢𝕩)" % (3410) ˘ 340
(<"ab") ˘ 2"cd" %% 22"ab", 'c', "ab", 'd'
(<"ab") ˘˜ 2"cd" %% 22'c', "ab", 'd', "ab"
"ab" 1 42"cd" %% 422"abcdabcdabcdabcd"
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (⟨⟩ ≡ ≢𝕨, ⟨2⟩ ≡ ≢𝕩)" % "ab"˘ "cd"
!"𝕨≍𝕩: 𝕨 and 𝕩 must have equal shapes (⟨2⟩ ≡ ≢𝕨, ⟨⟩ ≡ ≢𝕩)" % "ab"˘ "cd"
(
%USE IS_HEAPVERIFY
# big ˝˘ & `˘ tester
_basicArgs { Test _𝕣 ranks:
{𝕊f: {{f Test 01˜ 𝕩024832}¨ 𝕩3 1}¨ ranks}¨ +=
}
# w F _thing x tests F _thing⎉w x
_testFoldCells {´𝕗=? 0=×´(-𝕨)𝕩? 1; heapverify? 0=𝕩? 1 𝔽˝𝕨 𝕩; ! (𝔽˝𝕨 𝔽˝•internal.PureKeep𝕨) 𝕩}
_testScanCells { heapverify? 0=𝕩? 1 𝔽`𝕨 𝕩; ! (𝔽`𝕨 𝔽`•internal.PureKeep𝕨) 𝕩}
{1 𝕨 _testFoldCells 𝕩} _basicArgs 234
{1 𝕨 _testScanCells 𝕩} _basicArgs 234
{2 𝕨 _testScanCells 𝕩} _basicArgs 34
{2 𝕨 _testScanCells 𝕩} _basicArgs 34
0, 01, 10, 22, 1, 10, 101, 110, 30 {
𝕨𝕩 ¨
sh 𝕨𝕩
cr 𝕩
+= {
cr 𝕎 _testFoldCells 𝕩
cr 𝕎 _testScanCells 𝕩
} {0=×´sh? 𝕩; 𝕩, ¬¨ 𝕩, ¬(¯1)¨ 𝕩} sh¨ 01
} 0, 1, 2, 8, 32, 81, 48, 42, 59, 60, 63, 80, 81, 200, 640, 641
)