aboutsummaryrefslogtreecommitdiff
path: root/test/dz_rt
blob: 8572d441a7265779e151642b3d4b38b879200c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env dbqn

# Compile and run the primitive implementations, and prim.bqn

impl  LNS path"../src/r.bqn"

drun  EX path"../dc.bqn"

chrs←⟨
  "!+-×÷⋆√⌊⌈∧∨¬|=≠≤<>≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔"
  "˙˜˘¨⌜⁼´˝`"
  "∘⊸⟜○⌾⎉⚇⍟◶⊘"

nc  ≠¨chrs
chr  chrs
itr  0⥊˜≠chr

init  " "⊸∾¨(/"_"¨nc/011)∾¨(nc/"FMD")∾¨(nc+´⊸↑⥊"ABC"∾⌜•a)
post  ∾⟜" "¨/"_"¨nc/001
names  init∾¨'0'∾¨post

Inc  {
  i←⊑chr𝕩
  n0  itr↩{n1+𝕩}⌾(i⊑⊢)itr
  names((iinit)('0'+n)ipost)(i⊑⊢)names
}

# built-in assumptions
Mod  {((chr𝕨)names)  " ← "  𝕩}

pre  
  "IsArray ← 0≠≡"
  "Type    ← ⊑⟨⟩⥊0⊸⥊"
  "Log     ← ⋆⁼"
  "GroupLen← ≠¨⊔"
  "GroupOrd← ∾⊔∘⊢"
  '!' Mod "{𝕩 ⋄ ≤1}⍟(1≢⊢)"
⟩∾Mod⟜⥊¨ "+-×÷⋆⌊=≤≢⥊⊑↕⌜`⊘"


# checks if line is a builtin redefinition
E_isdef  (3≤≠)◶⟨0,∧´⟨chr," ","←↩"⟩∊˜¨3⊸↑⟩

# removes comments and replaces built-ins with names
E_proc  {
  l←≠chr
  q←≠`𝕩='"'  q∨↩≠`q<𝕩=''' ⋄ f←¬∨`q<𝕩='#'
  ∾ (((l×f/q)+chr⊸⊐) (≥⟜l)◶⟨⊑⟜names,⥊∘⊢⟩¨ ⊢) f/𝕩
}

E_redef ← { # handles [fmd] [←↩]
  tail ← E_proc 3↓𝕩 # must use old def
  Inc ⊑𝕩
  (E_proc 1↑𝕩) ∾ "←" ∾ tail
}

pre ∾↩ E_isdef◶E_proc‿E_redef¨ impl
t ← (¬∘⊑':'∊⊢)¨⊸/ 3⊸↓⌾(3⊸⊑) LNS path"prim.bqn"
res  DRun  ∾⟜(@+10)¨ pre  E_proc¨ t
  ("All "(⍕≠res)" passed!")(0=) /res