diff --git a/test/cases/cells.bqn b/test/cases/cells.bqn index a68abd93..17a5c765 100644 --- a/test/cases/cells.bqn +++ b/test/cases/cells.bqn @@ -1,6 +1,6 @@ %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 %USE tvar ⋄ _eqvar ← {r ← 𝕨 𝔽 _tvar 𝕩 ⋄ "failed eqvar"⊸!∘•internal.EEqual⟜(⊑r)¨ r ⋄ ⊑r} +%DEF eqvar LV←•internal.ListVariations ⋄ ⟨_eqvar0_⟩←⊑•args ⋄ _eqvar ← {𝔽 _eqvar0_ LV} %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 k _k ← {𝔽○•internal.Keep} diff --git a/test/cases/fuzz/select-cells.bqn b/test/cases/fuzz/select-cells.bqn index adca1093..e92fd8b6 100644 --- a/test/cases/fuzz/select-cells.bqn +++ b/test/cases/fuzz/select-cells.bqn @@ -1,6 +1,6 @@ %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 %USE tvar ⋄ _eqvar ← {r ← 𝕨 𝔽 _tvar 𝕩 ⋄ !∘≡⟜(⊑r)¨ r ⋄ ⊑r} +%DEF eqvar LV←•internal.ListVariations ⋄ ⟨_eqvar0_⟩←⊑•args ⋄ _eqvar ← {𝔽 _eqvar0_ LV} ( %USE eqvar diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn index 3730ebcc..9e0ad7b6 100644 --- a/test/cases/prims.bqn +++ b/test/cases/prims.bqn @@ -1,6 +1,6 @@ %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 %USE tvar ⋄ _eqvar ← {r ← 𝕨 𝔽 _tvar 𝕩 ⋄ "failed eqvar"⊸!∘•internal.EEqual⟜(⊑r)¨ r ⋄ ⊑r} +%DEF eqvar LV←•internal.ListVariations ⋄ ⟨_eqvar0_⟩←⊑•args ⋄ _eqvar ← {𝔽 _eqvar0_ LV} %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 k _k ← {𝔽○•internal.Keep} diff --git a/test/cases/system.bqn b/test/cases/system.bqn index 3247efc2..ece41491 100644 --- a/test/cases/system.bqn +++ b/test/cases/system.bqn @@ -1,6 +1,6 @@ %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 %USE tvar ⋄ _eqvar ← {r ← 𝕨 𝔽 _tvar 𝕩 ⋄ "failed eqvar"⊸!∘•internal.EEqual⟜(⊑r)¨ r ⋄ ⊑r} +%DEF eqvar LV←•internal.ListVariations ⋄ ⟨_eqvar0_⟩←⊑•args ⋄ _eqvar ← {𝔽 _eqvar0_ LV} # not tested here: •Out •Show •Exit •GetLine •Cmp •CurrentError •FFI •internal.HeapDump @@ -73,10 +73,10 @@ f←•ReBQN{system⇐⟨"e1"⋈↕0, "e2"⋈"", "e3"⋈0⥊<"hi"⟩ ⋄ primiti !¨ (•Type¨1⊑¨•primitives)∊3‿4‿5 # •state -6⊸↑⌾(1⊸⊑) •file.Name⌾⊑ •state %% ⟨"testDir","system",⟨"arg0",1⟩⟩ +6⊸↑⌾(1⊸⊑) 1⊸↓⌾(2⊸⊑) •file.Name⌾⊑ •state %% ⟨"testDir","system",⟨"arg0",1⟩⟩ # •args -•args %% ⟨"arg0",1⟩ +1↓•args %% ⟨"arg0",1⟩ # •path & •file.path •file.Name •path %% "testDir" diff --git a/test/cases/under.bqn b/test/cases/under.bqn index 108b9718..46ad24d9 100644 --- a/test/cases/under.bqn +++ b/test/cases/under.bqn @@ -1,6 +1,6 @@ %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 %USE tvar ⋄ _eqvar ← {r ← 𝕨 𝔽 _tvar 𝕩 ⋄ "failed eqvar"⊸!∘•internal.EEqual⟜(⊑r)¨ r ⋄ ⊑r} +%DEF eqvar LV←•internal.ListVariations ⋄ ⟨_eqvar0_⟩←⊑•args ⋄ _eqvar ← {𝔽 _eqvar0_ LV} %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}} # ¨ & ˘ diff --git a/test/run.bqn b/test/run.bqn index bd697c36..38b58a43 100644 --- a/test/run.bqn +++ b/test/run.bqn @@ -148,7 +148,7 @@ Run ← { 𝕊 testname: badCount+↩ 1 } ErrMsg ← {𝕊: m←•CurrentError@ ⋄ {1==m? ∧´2=•Type¨m? m; •Repr⎊"(unrepresentable)" m}} - Eval ← {⟨dir, ∾⟨testname,"_line_",•Repr currLn+1,".bqn"⟩, ⟨"arg0",1⟩⟩ •BQN 𝕩} + Eval ← {⟨dir, ∾⟨testname,"_line_",•Repr currLn+1,".bqn"⟩, ⟨helpers,"arg0",1⟩⟩ •BQN 𝕩} EvalS ← •BQN⎊{𝕊: Bad "Bad comparison value" ⋄ "(bad)"} toRun ← tests toRun {{𝕩.enabled}∘⊑¨⊸/𝕩}↩ @@ -207,6 +207,42 @@ Run ← { 𝕊 testname: } }⍟o.run @ } + +helpers ← { + ⟨TV⇐Variation, CLR⇐ClearRefs, HasFill, EEqual⟩ ← •internal + indistinguishable ← {⟨I⇐Indistinguishable⟩: I; EEqual} •internal + _tvar0_ ⇐ { + F _𝕣_ LV x: (CLR@) ⊢ { F 𝕩 TV x}¨ LV 𝕩; + w F _𝕣_ LV x: (CLR@) ⊢ (LV 𝕨) {(𝕨 TV w) F 𝕩 TV x}⌜ LV 𝕩 + } + + {o.heapverify? Indistinguishable↩EEqual; @} + Classify ← {(≢𝕩)⥊ ⊐Indistinguishable⌜˜ ⥊𝕩} + + _eqvar0_ ⇐ { LV ← 𝔾 + r ← 𝕨 𝔽 _tvar0_ 𝔾 𝕩 + class ← {·𝕊·: 𝕨+2×𝕩; 𝕊·: 𝕩} c0←(≢r) {HasFill 𝕩? 'h' = 1⊸⊑¨ LV 𝕩; 𝕨⥊0}¨ args←𝕨⋈𝕩 + (⊑r)⊸("failed eqvar eequal" ! EEqual)¨ 1↓⥊r + { + c0 ← ⊑𝕩 + { + c0 Indistinguishable 𝕩? + 1; + + classes ← { + ⟨a⟩: (@+10)∾ •Fmt "type"‿"class" ∾˘ a ≍ Classify r; + wc‿xc: + wv‿xv ← LV¨ args + wc‿xc+↩'A' + "row=type of 𝕨, col=type of 𝕩:" ∾ ∾⟨@+10,' ',' '⟩⊸∾¨ ⟨∾⟨"\|",xc," ==",∾' '⊸∾¨xv⟩⟩ ∾ (wc⋈¨wv) {c‿v𝕊𝕩: c ∾ '|' ∾ 𝕩 ∾ ' ' ∾ v}¨ <˘ '0'+Classify r + } c0 + ! "TEST FAIL: _eqvar0_ failed: "∾classes + }¨ 𝕩 + }¨ class ⊔ r + ⊑r + } +} + Run¨ SearchRefine o.files •Exit⍟(0⊸≠)⍟(¬o.heapverify) exitCode \ No newline at end of file