diff --git a/test/cases/hash.bqn b/test/cases/hash.bqn index 339c2670..acf8be3c 100644 --- a/test/cases/hash.bqn +++ b/test/cases/hash.bqn @@ -1,3 +1,5 @@ +%DEF eqvar ⟨_eqvar⟩←⊑•args + # some checks for behavior around ¯0; not strictly necessary to stay, but other tests will probably become meaningless without these! 1⊏64‿1•bit._cast ≍˘ •ParseFloat¨ "1.2"‿"-0" %% 63‿1/0‿1 ! (4⥊0) (≡ ∧ ≢○(64‿1•bit._cast⊢)) 1↓¯1×π∾4⥊0 @@ -33,7 +35,9 @@ a←(•ParseFloat¨ "1.2"‿"-0"‿"0")∾-⊸⋈0÷0 ⋄ ! (0‿3‿3‿3⊏a) (32767⥊"abc")⊐100⥊"ababacadabacaba" %% (100⥊0‿1‿0‿1‿0‿2‿0‿32767‿0‿1‿0‿2‿0‿1‿0) (32768⥊"abc")⊐100⥊"ababacadabacaba" %% (100⥊0‿1‿0‿1‿0‿2‿0‿32768‿0‿1‿0‿2‿0‿1‿0) ⍷ •internal.Variation⟜(↕1)¨ "Ab"‿"Ai8" %% ⟨⋈0⟩ -!∘≡¨⟜⊏ 0•Hash¨ ⟨↕5 ⋄ 1↓0.5∾↕5 ⋄ 1↓'h'∾↕5⟩ +%USE eqvar ⋄ 0⊸•Hash _eqvar ↕5 +%USE eqvar ⋄ 0⊸•Hash _eqvar "hello" +%USE eqvar ⋄ 0⊸•Hash _eqvar ↕⋈10 {b←•internal.Unshare a←"Ai8"•internal.Variation ∾⟨16⥊0‿0‿0‿0‿0‿0‿0‿¯128, 8⥊0, 8↑2⟩ ⋄ c←8‿64•bit._cast a ⋄ ! 1‿0‿0‿1≡∊c ⋄ •internal.Keep •Hash c ⋄ ! a≡b} # make sure sign bit doesn't mutate away diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn index a463f112..6076fc59 100644 --- a/test/cases/prims.bqn +++ b/test/cases/prims.bqn @@ -4,6 +4,7 @@ %DEF eqvarv ⟨_eqvarv_⟩←⊑•args %DEF evar %USE tvar ⋄ _evar ← {ok←{⇐} ⋄ r←⥊𝕨 ok∘𝔽⎊{𝕊: •CurrentError@} _tvar 𝕩 ⋄ {⊑ok∊r? !"TEST FAIL: variation didn't error"; ("TEST FAIL: varying error messages"⊸⋈ ! 1=≠)⍷r ⋄ (⊑r)!0}} %DEF eqerr %USE eqvar ⋄ _eqerr ← {ok←{⇐} ⋄ r←⥊𝕨 ok∘𝔽⎊{𝕊: •CurrentError@}⌜ 𝕩 ⋄ {⊑ok∊r? !"TEST FAIL: case didn't error"; ("TEST FAIL: varying error messages"⊸⋈ ! 1=≠)⍷r ⋄ (⊑r)!0}} +%DEF eqall _eqall0 ← {r←⊑𝕩 ⋄ ("TEST FAIL: eqall failed" ! r⊸𝔽)¨ 𝕩 ⋄ r} ⋄ EqAll ← •internal.Indistinguishable _eqall0 %DEF k _k ← {𝔽○•internal.Keep} # batch checks @@ -225,10 +226,10 @@ a←↕2 ⋄ ! "e" ≡ (↕10){b←a‿a‿a‿a‿a‿a‿a‿a‿a‿a ⋄ {a←↕3 ⋄ !'e'≡>⎊'e' ⟨a, a, ↕2, a, a⟩ ⋄ ! 1≡•internal.Refc a} {a←↕3 ⋄ > ⟨a, a, ↕3, a, a⟩ ⋄ ! 1≡•internal.Refc a} {a←(200⥊1)⥊↕3 ⋄ ! 'e'≡>⎊'e' (200⥊1)⥊⟨a, a, ↕2, a, a⟩ ⋄ ! 1≡•internal.Refc a} -%USE var ⋄ a←2‿3⥊↕6 ⋄ b←2‿3⥊"abcdef" ⋄ !∘≡¨⟜⊏ ⥊ (LV a) {>1‿2‿1‿1⥊𝕨‿𝕩V¨a‿b}⌜ LV b -%USE var ⋄ a←b←2‿3⥊<<˘"abcd" ⋄ !∘≡¨⟜⊏ ⥊ (LV a) {>1‿2‿1‿1⥊𝕨‿𝕩V¨a‿b}⌜ LV b -%USE var ⋄ {a‿b: ! ∧´(⊏≡¨⊢)⥊ (LV a) {>1‿2‿1‿1⥊𝕨‿𝕩V¨a‿b}⌜ LV b}¨ ⟨2⥊<2‿3⥊<<˘"abcd" ⋄ ⟨2‿3⥊↕6,2‿3⥊"abcdef"⟩⟩ -%USE var ⋄ {a‿b: ! ∧´(⊏≡¨⊢)⥊ (LV a) {∾𝕨‿𝕩V¨a‿b}⌜ LV b}¨ ⟨2⥊<2‿3⥊<<˘"abcd" ⋄ ⟨2‿3⥊↕6,2‿3⥊"abcdef"⟩⟩ +%USE eqvar ⋄ a←2‿3⥊↕6 ⋄ b←2‿3⥊"abcdef" ⋄ a {>1‿2‿1‿1⥊𝕨‿𝕩}_eqvar b %% 1‿2‿1‿1‿2‿3⥊0‿1‿2‿3‿4‿5‿'a'‿'b'‿'c'‿'d'‿'e'‿'f' +%USE eqvar ⋄ a←b←2‿3⥊<<˘"abcd" ⋄ a {>1‿2‿1‿1⥊𝕨‿𝕩}_eqvar b %% 1‿2‿1‿1‿2‿3⥊<<¨"abcd" +%USE eqvar ⋄ {>1‿2‿1‿1⥊𝕨‿𝕩}_eqvar´¨ ⟨2⥊<2‿3⥊<<˘"abcd" ⋄ ⟨2‿3⥊↕6,2‿3⥊"abcdef"⟩⟩ %% ⟨1‿2‿1‿1‿2‿3⥊<<¨"abcd", 1‿2‿1‿1‿2‿3⥊0‿1‿2‿3‿4‿5‿'a'‿'b'‿'c'‿'d'‿'e'‿'f'⟩ +%USE eqvar ⋄ {∾𝕨‿𝕩}_eqvar´¨ ⟨2⥊<2‿3⥊<<˘"abcd" ⋄ ⟨2‿3⥊↕6,2‿3⥊"abcdef"⟩⟩ %% ⟨ 4‿3⥊<<¨"abcd", 4‿3⥊0‿1‿2‿3‿4‿5‿'a'‿'b'‿'c'‿'d'‿'e'‿'f'⟩ # <𝕩 ! ⊑∘<¨⊸≡ ∾⟜- ⥊(¯2+↕5)+⌜2⋆↕40 @@ -297,9 +298,9 @@ a←↕2 ⋄ ! "e" ≡ (↕10){b←a‿a‿a‿a‿a‿a‿a‿a‿a‿a ⋄ !"»𝕩: 𝕩 cannot be a scalar" % »<0 # ⍉𝕩 -%USE var ⋄ !∘≡¨⟜⊏ {⍉ 𝕩 V a}¨ LV a←2‿3‿4•rand.Range 2 -%USE var ⋄ !∘≡¨⟜⊏ {⍉ 𝕩 V a}¨ LV a←⋈¨ 2‿3‿4•rand.Range 2 -%USE var ⋄ !∘≡¨⟜⊏ {⍉ 𝕩 V a}¨ LV a←@+2‿3‿4•rand.Range 100 +%USE eqvar ⋄ ⍉_eqvar 2‿3‿4•rand.Range 2 +%USE eqvar ⋄ ⍉_eqvar ⋈¨ 2‿3‿4•rand.Range 2 +%USE eqvar ⋄ ⍉_eqvar @+2‿3‿4•rand.Range 100 # ⌽𝕩 %USE var ⋄ {{! 𝕩 ≡ ⌽"Ai8"V⌽𝕩} 𝕩•rand.Range 2}¨ ↕1000 @@ -335,14 +336,10 @@ b←1↓1∾a←"hello" ⋄ b ⌽⎊'e' ⥊⟜1⍟2 5 ⋄ a ≡○•Hash b %% 1 ≠⍷•Hash¨ ⟨10000↑•internal.Squeeze 1e9∾˜↕10000, ↕10000⟩ %% 1 # ¨ - 1 {𝕊:1‿2}¨ 1 %% <1‿2 - 1 {𝕊:1‿2}¨<1 %% <1‿2 -(<1){𝕊:1‿2}¨ 1 %% <1‿2 -(<1){𝕊:1‿2}¨<1 %% <1‿2 - 1 1‿2¨ 1 %% <1‿2 - 1 1‿2¨<1 %% <1‿2 -(<1)1‿2¨ 1 %% <1‿2 -(<1)1‿2¨<1 %% <1‿2 +%USE eqall ⋄ Eqall {𝕊: 1‿2}¨⌜˜ ⟨1, <1⟩ %% <1‿2 +%USE eqall ⋄ Eqall 1‿2¨⌜˜ ⟨1, <1⟩ %% <1‿2 +%USE eqall ⋄ Eqall ⟨1‿2˙,1‿2⟩ {𝕨¨˜ 𝕩}⌜ ⟨↕5, "hello", ↕⋈5⟩ %% 5⥊<1‿2 +%USE eqall ⋄ Eqall ⟨{𝕊:1‿2}⟩ {𝕨¨˜ 𝕩}⌜ ⟨↕5, "hello", ↕⋈5⟩ %% 5⥊<1‿2 !"Mapping: Expected equal shape prefix (⟨2⟩ ≡ ≢𝕨, 4‿4 ≡ ≢𝕩)" % 1‿2+¨↕4‿4 !"Mapping: Expected equal shape prefix (⟨2⟩ ≡ ≢𝕨, ⟨4⟩ ≡ ≢𝕩)" % 1‿2+¨↕4 ⊢¨ {a←𝕩 ⋄ ⥊𝕩} 2‿3⥊<"a" %% 6⥊<"a" diff --git a/test/cases/system.bqn b/test/cases/system.bqn index 65c271ca..59523453 100644 --- a/test/cases/system.bqn +++ b/test/cases/system.bqn @@ -9,8 +9,8 @@ # standard system values # •BQN -%USE tvar ⋄ !∘≡⟜" "¨ •BQN _tvar "1↑""""" -⟨⟩ •BQN "Ah"•internal.Variation"1↑""""" %% " " +%USE eqvar ⋄ •BQN _eqvar "1↑""""" %% " " +%USE eqvar ⋄ ⟨⟩ •BQN _eqvar "1↑""""" %% " " ! ≡´ t←⟨•path,"custom-name", "arg"⟩•BQN"⟨•path‿•name‿•args ⋄ •state⟩" ⋄ ! ⟨•path, "custom-name", "arg"⟩ ≡ ⊑t ! ≡´ t←⟨•path,"custom-name" ⟩•BQN"⟨•path‿•name‿•args ⋄ •state⟩" ⋄ ! ⟨•path, "custom-name", ⟨⟩⟩ ≡ ⊑t ! ≡´ t←⟨•path ⟩•BQN"⟨•path‿•name‿•args ⋄ •state⟩" ⋄ ! ⟨•path, "", ⟨⟩⟩ ≡ ⊑t @@ -318,8 +318,8 @@ r←•MakeRand 1 ⋄ ! 1¨⊸≡ ∊{𝕊: 500 r.Deal 1000}¨ ↕4 # •bit !"•bit._cast: 𝕩 must have rank at least 1" % 8‿1 •bit._cast 123 (↕10) {! (𝕨⥊¯1) ≡ 1‿𝕩•bit._cast (𝕨×𝕩)⥊1}⌜ 8‿16‿32 -%USE var ⋄ {t←𝕩⊏1‿8‿16‿32‿64 ⋄ 1≠⊑t? !∘≡¨⟜⊏ r←{t•bit._cast 𝕩 V a}¨ LV a← ↕128 ⋄ ⊑⊑r; @}¨ ↕4‿4 -%USE var ⋄ {t←𝕩⊏1‿8‿16‿32‿64 ⋄ !∘≡¨⟜⊏ r←{t•bit._cast 𝕩 V a}¨ LV a←4=↕128 ⋄ ⊑⊑r}¨ ↕4‿4 +%USE eqvar ⋄ {t←𝕩⊏1‿8‿16‿32‿64 ⋄ 1≠⊑t? {t•bit._cast 𝕩}_eqvar ↕128; @}¨ ↕4‿4 +%USE eqvar ⋄ {t←𝕩⊏1‿8‿16‿32‿64 ⋄ {t•bit._cast 𝕩}_eqvar 4=↕128}¨ ↕4‿4 ! 10‿1 ≡ ≢8‿16•bit._cast c←0↓2↕'a'+11 •rand.Range 26 ⋄ ! 10‿2 ≡ ≢c ! 10‿1 ≡ ≢8‿16•bit._cast c← 2↕'a'+11 •rand.Range 26 ⋄ ! 10‿2 ≡ ≢c ⊑ 8‿32•bit._cast 3↓↕7 %% 100992003 @@ -368,9 +368,9 @@ Str ← {!=𝕩 ⋄ !×≠𝕩 ⋄ ! ∧´2=•Type¨𝕩} ⋄ Str •platform.o @-˜•ToUTF8 "𝕩⍉hello" %% 240‿157‿149‿169‿226‿141‿137‿104‿101‿108‿108‿111 ! •FromUTF8∘•ToUTF8⊸≡ "𝕩⍉hello" ( - %USE tvar + %USE eqvar ip←⋈¨ i←@+⍷0⌈∧(⥊(¯5+↕11)+⌜2⋆↕20)∾1114111-↕10 - {! 𝕩≡•FromUTF8•ToUTF8 𝕩 ⋄ !∘≡¨⟜⊏ •ToUTF8 _tvar 𝕩}¨ ↑i + {! 𝕩≡•FromUTF8•ToUTF8 𝕩 ⋄ •ToUTF8 _eqvar 𝕩}¨ ↑i t ← •ToUTF8¨ ip ! (∾t)≡•ToUTF8 i ! ip ≡ •FromUTF8¨ t diff --git a/test/cases/under.bqn b/test/cases/under.bqn index 46e1cef4..b46e95f2 100644 --- a/test/cases/under.bqn +++ b/test/cases/under.bqn @@ -104,7 +104,7 @@ n←500 ⋄ a←↕n ⋄ i←(-n)+↕2×n ⋄ r←⌽(2×n)⥊a ⋄ ! (⌽a) ≡ !"𝔽⌾(a⊸⊏): Incompatible result elements" % 3‿4‿5⌾(1‿1‿2⊸⊏) a←<¨↕10 ⋄ •internal.Keep a !"𝔽⌾(a⊸⊏): Incompatible result elements" % 3‿4⌾(("Ah"•internal.Variation 1‿1)⊸⊏) <¨↕10 !"𝔽⌾(a⊸⊏): Incompatible result elements" % %USE evar ⋄ (27≠↕30) {𝕨⌾((30⥊↕10)⊸⊏) 𝕩} _evar 100⥊1 -!"𝔽⌾(a⊸⊏): Incompatible result elements" % %USE evar ⋄ !∘≡¨⟜⊏⊸⊢⟜⊑ {{¬⌾(31‿4⊸⊑)𝕩}∘•internal.Keep⌾((∾10⥊<↕≠𝕩)⊸⊏) 𝕩} _evar 10‿5⥊1‿1‿0‿0‿1‿1 +!"𝔽⌾(a⊸⊏): Incompatible result elements" % %USE evar ⋄ {{¬⌾(31‿4⊸⊑)𝕩}∘•internal.Keep⌾((∾10⥊<↕≠𝕩)⊸⊏) 𝕩} _evar 10‿5⥊1‿1‿0‿0‿1‿1 %USE eqvar ⋄ {¬⌾((∾10⥊<↕≠𝕩)⊸⊏) 𝕩} _eqvar 10‿5⥊1‿1‿0‿0‿1‿1 %% 10‿5⥊0‿0‿1‿1‿0‿0 20‿20⌾(1‿1⊸⊏) ↕10 %% 0‿20∾2+↕8 100⊸+⌾(1‿2‿¯1⊸⊏) ↕5 %% 0‿101‿102‿3‿104 @@ -206,9 +206,6 @@ n←500 ⋄ a←↕n ⋄ i←(-n)+↕2×n ⋄ r←⌽(2×n)⥊a ⋄ ! (⌽a) ≡ 4↑ (⋈⋈3)⌾(0‿1‿0⊸/) ↕⋈3 %% ⟨⋈0,⋈3,⋈2,⋈0⟩ 4↑ ⊢⌾(0‿1‿0⊸/) ↕⋈3 %% ⟨⋈0,⋈1,⋈2,⋈0⟩ 4↑ ⊢⌾(0‿0‿0⊸/) ↕⋈3 %% ⟨⋈0,⋈1,⋈2,⋈0⟩ -!"No fill found" % 4↑ (⋈⋈3)⌾(0‿1‿0⊸/) ↕⋈3 %PROPER_FILLS -!"No fill found" % 4↑ ⊢⌾(0‿1‿0⊸/) ↕⋈3 %PROPER_FILLS -!"No fill found" % 4↑ ⊢⌾(0‿0‿0⊸/) ↕⋈3 %PROPER_FILLS # < ⊢⌾< 4 %% 4