aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdc.bqn15
-rw-r--r--test/bcases.bqn3
-rwxr-xr-xtest/bt7
3 files changed, 17 insertions, 8 deletions
diff --git a/dc.bqn b/dc.bqn
index a2eee448..4ba2c642 100755
--- a/dc.bqn
+++ b/dc.bqn
@@ -121,11 +121,16 @@ Compile←{
DParse ← {
l←≠𝕩⋄sep←𝕩∊bS⋄𝕩↩(⌽⍋⍋⌽+`(≠↑0∾⊢)⊸∨sep)⊏𝕩
- a←𝕩∊2↑bG⋄o←𝕩=1⊑bB⋄c←𝕩=0⊑bB⋄v←𝕩≥vi⋄f←𝕩∊bF
- d←+`o-c⋄fe←(d⍋⊸(⍋∘⊣⊏+`∘⊏)o)⊏l∾(⍋⊏⟜d)⊸⊏/c
- dy←1↓0∾˜o∨v⋄la←(¯1⌽f×dy)/(o×fe)⌈↕l⋄mc←/f׬dy
- n←𝕩≥vi+𝕨⋄id←/v-n⋄cn←/f∨n⋄s←/sep⋄u←⍷ob←cn⊏𝕩
- bc←(⍋(∾˜cn∾id)∾(1+/a)∾s∾mc∾la)⊏∾⟨0¨cn,(1+(id-1)⊏a),u⊐ob,vi-˜id⊏𝕩,(11-⊑bG)+a/𝕩,14¨s,5¨mc,6¨la⟩
+ o←𝕩=1⊑bB⋄c←𝕩=0⊑bB
+ gi←⍋g←⍋d←+`o-c⋄pi←+`ps←g⊏o
+ tr←pi⊏(0∾(⍋⊏⟜d)⊸⊏/o)⊏xf←⌽(¬o)=○(·⌈`(1+↕∘≠)⊸×)○⌽𝕩∊bF
+ tf←(2(|<≤)↕∘≠⊸(⊣-·⌈`×)ps)×tr
+ f←¯1↓(⍋0∾d)⊏xf∾0
+ 𝕩↩g⊏𝕩⋄v←𝕩≥vi⋄fa←/tf∨tr<f
+ dy←1↓0∾˜(tr>tf∨ps)∨v∨(g⊏c)>f
+ n←𝕩≥vi+𝕨⋄id←/v-n⋄cn←/n∨𝕩∊bF⋄a←𝕩∊2↑bG⋄s←/𝕩∊bS⋄u←⍷ob←cn⊏𝕩
+ or←⍋g⊏˜∾outa←⟨cn,cn,id,id,1+/a,s,+⟜(⊏⟜dy)fa⟩
+ bc←or⊏∾outb←⟨0¨cn,u⊐ob,(1+(id-1)⊏a),vi-˜id⊏𝕩,(11-⊑bG)+a/𝕩,14¨s,5+fa⊏dy+4×tr⟩
bc‿u
}
diff --git a/test/bcases.bqn b/test/bcases.bqn
new file mode 100644
index 00000000..93388d41
--- /dev/null
+++ b/test/bcases.bqn
@@ -0,0 +1,3 @@
+-4 % (⌈-)4+÷2
+3 % √5(+×-)4
+1 % 4((¬=)∧¬=1+-)6
diff --git a/test/bt b/test/bt
index 4dc0ab21..a6b8eeb3 100755
--- a/test/bt
+++ b/test/bt
@@ -1,6 +1,7 @@
#! /usr/bin/env dbqn
dRun ← ⟨"dRun"⟩ •EX •path∾"../dcshim.bqn"
-c ← (¬"{"⊑∘∊⊢)¨⊸/ •LNS •path∾"cases.bqn"
-p ← '%' ⍎⊸≡⟜DRun´∘((+`-2⊸×)∘=⊔⊢)¨ c
-• ← "All passed!"⍟(0=≠) /¬p
+c ← (¬"{"⊑∘∊⊢)¨⊸/ ∾(•LNS •path∾∾⟜"cases.bqn")¨""‿"b"
+M ← {e‿b: (⍎e)⊸≢◶""‿{(•UCS 10)∾˜""""∾b∾""": expected "∾e∾" but received "∾𝕩} DRun b}
+r ← '%' M∘((+`-2⊸×)∘=⊔⊢)¨ c
+• ← "All passed!"⍟(0=≠) ∾r