aboutsummaryrefslogtreecommitdiff
path: root/test/cmpref.bqn
blob: a494f55aa984da85668da044d9f29c2693d7e9ad (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 testref.bqn

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

drun  ((<•path∾"../c.bqn")∾<"DRun") •EX •path∾"../dzref"

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

nc  ¨chrs
chr  chrs
itr  0˜chr

init  " "¨(/"_"¨nc/011)¨(nc/"FMD")¨(nc+´↑⥊"ABC"•a)
post  " "¨/"_"¨nc/001
names  init¨(•UCS 48)¨post

Inc  {
  ichr𝕩
  n0  itr{n1+𝕩}(i⊑⊢)itr
  names((iinit)(•UCS 48+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  {
  lchr
  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_isdefE_procE_redef¨ impl
t  (¬':'∊⊢)¨/ 3(3) •LNS •path∾"testref.bqn"
res  DRun  (•UCS 10)¨ pre  E_proc¨ t
  ("All "(res)" passed!")(0=≠) /res