# value block
{v: 2+2} # 4
a←1 ⋄ a+{v: a←2 ⋄ b←3 ⋄ a} # 3
{v: b←5} ⋄ b # err
{2+2} # 4
1+{2+2} # 5
F←{F:≤4} ⋄ 1 # 1

# functions
{    -𝕩}10 # ¯10
{𝕊  :-𝕩}10 # ¯10
{S  :-𝕩}10 # ¯10
{𝕊 𝕩:-𝕩}10 # ¯10
{𝕊 x:-𝕩}10 # ¯10
{S 𝕩:-𝕩}10 # ¯10
{S x:-𝕩}10 # ¯10
{S x:-x}10 # ¯10
{  𝕩:-𝕩}10 # ¯10
1{ 𝕩:-𝕩}10 # err

# 1-modifiers
×˜{        𝔽⍟2  } 2 # 16
×˜{        𝔽⍟2 𝕩} 2 # 16
×˜{        𝔽⍟2  }   # ×˜⍟2
×˜{  _r  : 𝔽⍟2  } 2 # 16
×˜{  _r  : 𝔽⍟2 𝕩} 2 # 16
×˜{F _r  : F⍟2  } 2 # 16
×˜{F _r  : F⍟2  }   # ×˜⍟2
×˜{F _r  : F⍟2 𝕩} 2 # 16
×˜{F _r 𝕩: F⍟2  } 2 # ×˜⍟2
×˜{F _r x: F⍟2 x} 2 # 16

# 2-modifiers
×˜{           𝔾 𝔽⍟2  }- 2 # ¯16
×˜{           𝔾 𝔽⍟2 𝕩}- 2 # ¯16
×˜{           𝔾 𝔽⍟2  }-   # -×˜⍟2
×˜{  _r_    : 𝔾 𝔽⍟2  }- 2 # ¯16
×˜{  _r_    : 𝔾 𝔽⍟2 𝕩}- 2 # ¯16
×˜{F _r_ G  : G F⍟2  }- 2 # ¯16
×˜{F _r_ G  : G F⍟2  }-   # -×˜⍟2
×˜{F _r_ G  : G F⍟2 𝕩}- 2 # ¯16
×˜{F _r_ G 𝕩: G F⍟2  }- 2 # -×˜⍟2
×˜{F _r_ G x: G F⍟2 x}- 2 # ¯16

_m ← {𝔽𝔾}(1+⊢) ⋄ -_m ÷_m 24 # ¯1.04

# invalid tokens
 {v: 𝕩}   # err
{{v: 𝕩}}0 # err
{ S: _𝕣 } # err
{ S: _𝕣_} # err
{ S:  𝔽 } # err
{ S:  𝔾 } # err
{_r:  𝔾 } # err
{_r: _𝕣_} # err

# body/header matching
 {𝕩}10 # 10
1{𝕩}10 # 10
 {𝕩 ; 𝕨}10 # 10
1{𝕩 ; 𝕨}10 # 1
 {2 ; 4}10 # 2
1{2 ; 4}10 # 4

{ 2:4;𝕩}¨↕4 # 0‿1‿4‿3
{𝕊2:4;𝕩}¨↕4 # 0‿1‿4‿3
{  a‿2:a;  a‿b:b}¨"abcd"∾¨↕4 # 0‿1‿'c'‿3
{S a‿2:a;S a‿b:b}¨"abcd"∾¨↕4 # 0‿1‿'c'‿3
 {𝕨𝕊0:5 ; 10+𝕩 ; 10+𝕨}¨↕2 # 5‿11
3{𝕨𝕊0:5 ; 10+𝕩 ; 10+𝕨}¨↕2 # 5‿13


 -{𝔽𝕩 ; 𝕩} 5 # ¯5
1-{𝔽𝕩 ; 𝕩} 5 # 5
 -{𝕩 ; 𝔽𝕩} 5 # 5
1-{𝕩 ; 𝔽𝕩} 5 # ¯5


10 -{ 𝔽𝔾 }÷2 # ¯5
10 -{ 𝔽𝔾𝕩}÷2 # ¯0.5
10 -{𝔽𝕨𝔾𝕩}÷2 # ¯5
   -{𝔽𝕨𝔾𝕩}÷2 # ¯0.5
10 -{ 𝕗_𝕣_𝕘 : 𝔽𝔾}÷2 # ¯5
10 -{𝕨𝕗_𝕣_𝕘𝕩: 𝔽𝔾}÷2 # -÷
10 -{ 𝕗_𝕣_𝕘𝕩: 𝔽𝔾}÷2 # err
10 -{ 𝕗_𝕣_𝕘 : 𝔽𝔾𝕩}÷2 # ¯0.5 # maybe should error?
{𝔽_𝕣_1  :1 ; 𝔽_𝕣_𝔾 :2} # err
{𝔽_𝕣_1  :1 ; 𝔽_𝕣_𝔾x:2} # err
-{1+𝕩 ; 𝔽𝔾𝕩}÷4 # 5
-{ 𝔽𝕩 ; 𝔽𝔾𝕩}÷4 # ¯4


# inverse headers

10{ 𝕊⁼ : 𝕨-𝕩}⁼1 # 9
  { 𝕊⁼ : 𝕨-𝕩}⁼1 # ¯1
10{𝕨𝕊⁼𝕩: 𝕨-𝕩}⁼1 # 9
  {𝕨𝕊⁼𝕩: 𝕨-𝕩}⁼1 # ¯1
10{ 𝕊⁼𝕩: 𝕨-𝕩}⁼1 # err
  { 𝕊⁼𝕩: 𝕨-𝕩}⁼1 # ¯1

10{ 𝕊˜⁼ : 𝕨-𝕩}˜⁼1 # 9
10{𝕨𝕊˜⁼𝕩: 𝕨-𝕩}˜⁼1 # 9
  {𝕨𝕊˜⁼𝕩: 𝕨-𝕩}˜⁼1 # err
  { 𝕊˜⁼ : 𝕨-𝕩}˜⁼1 # err
  { 𝕊˜⁼𝕩: 𝕨-𝕩}˜⁼  # err
{𝕗_𝕣_𝕘 ⁼: 3} # err # because immediate
{𝕗_𝕣_𝕘˜⁼: 3} # err

# TODO modifier inverses


# variable scoping

b←1 ⋄ 9{b←5 ⋄ b ; b‿𝕩}2 # 1‿2

# bad syntax
{𝕨 𝕊: 1} # err
{𝕩 ; 𝕩 ; 𝕩} # err
{𝕩 ; 𝕊𝕩:𝕩 ; 𝕩} # err
{𝕩 ; 𝕊𝕩: 𝕩} # err
{; 2+𝕩} # err
{: 2+𝕩} # err
{2+𝕩 ;} # err
{2+𝕩 :} # err
{2+𝕩 ;; 1+𝕩} # err
{𝕊𝕩: 𝕊𝕩: 4} # err
{𝕊𝕩:: 4} # err
{𝕊𝕩: } # err
{𝕊 1 2: 𝕩} # err
{1 1 𝕊 1: 𝕩} # err
{1 𝕊 1 1: 𝕩} # err
{1 1: 𝕩} # err

{  1 1 _𝕣 1  : 𝕩} ⋄ 1 # 1
{    1 _𝕣 1 1: 𝕩} ⋄ 1 # err
{1 1 1 _𝕣 1  : 𝕩} ⋄ 1 # err
{  1 1 _𝕣 1 1: 𝕩} ⋄ 1 # err
{  1 1 _𝕣_ 1 1  : 𝕩} ⋄ 1 # 1
{    1 _𝕣_      : 𝕩} ⋄ 1 # err
{    1 _𝕣_ 1 1 1: 𝕩} ⋄ 1 # err
{1 1 1 _𝕣_ 1 1  : 𝕩} ⋄ 1 # err
{  1 1 _𝕣_ 1 1 1: 𝕩} ⋄ 1 # err
{𝕨 𝕣 𝕩: 𝕩} ⋄ 1 # err

# {_𝕣 𝕩: 𝕩} # err
# {_𝕣 𝕩: 𝕩} # err
# {: 𝕩} # err
# {: 𝕩} # err

# bad names
# {𝕨 _𝕣_ 𝕩: 𝕩} # err
# {𝕗 _𝕣_ 𝕘: 𝕩} # err
# {𝕩 _𝕣: 𝕩} # err
# {𝕘 _𝕣: 𝕩} # err
# {𝕗 _𝕣: 𝕩} # err
# {𝕘 _𝕣_ 𝕘: 𝕩} # err
# {𝕗 _𝕣_ 𝕗: 𝕩} # err


# random usage tests

1‿1{𝕗_r 1:0⊑𝕗 ; 𝕗_r 2:1⊑𝕗 ; _r: +´ 𝕗_r¨ 𝕩-1‿2} 10 # 55
1‿1{𝕗_r 1:0⊑𝕗 ; 𝕗_r 2:1⊑𝕗 ; _r: +´ 𝕗_𝕣¨ 𝕩-1‿2} 10 # 55
1‿1{𝕗_r 1:0⊑𝕗 ; 𝕗_r 2:1⊑𝕗 ;     +´   𝕊¨ 𝕩-1‿2} 10 # 55

1‿1{𝕗_r_𝕘 1:0⊑𝕗 ; 𝕗_r_𝕘 2:1⊑𝕗 ; _r_: 𝔾´ 𝕗_𝕣_𝕘¨ 𝕩-1‿2}+ 10 # 55
1‿1{𝕗_r_𝕘 1:0⊑𝕗 ; 𝕗_r_𝕘 2:1⊑𝕗 ; _r_: 𝔾´ 𝕊¨ 𝕩-1‿2}+ 10 # 55

2  {⟨a,b⟩_r𝕩: a‿b⥊𝕩 ; a _r𝕩: a‿a _r 𝕩} 1 # 2‿2⥊1
2‿5{⟨a,b⟩_r𝕩: a‿b⥊𝕩 ; a _r𝕩: a‿a _r 𝕩} 1 # 2‿5⥊1
2‿5{⟨a,b⟩_r: a‿b⊸⥊ ; a _r: a‿a _r} 1 # err
2‿5{⟨a,b⟩_r: a‿b⊸⥊ ; a _r 𝕩: a‿a _r 𝕩} 1 # err # probably

  {⟨𝕩⟩}{𝔽_r_𝔾 𝕩: 𝔽𝕩 ; 𝕨 𝔽_r_𝔾 𝕩: 𝕨𝔾𝕩}{⟨𝕨,𝕩⟩} 2 # ⟨2⟩
1 {⟨𝕩⟩}{𝔽_r_𝔾 𝕩: 𝔽𝕩 ; 𝕨 𝔽_r_𝔾 𝕩: 𝕨𝔾𝕩}{⟨𝕨,𝕩⟩} 2 # 1‿2
  {⟨𝕩⟩}{F _r_ G: {𝕊𝕩: F𝕩 ; 𝕨𝕊𝕩: 𝕨G𝕩}}{⟨𝕨,𝕩⟩} 2 # ⟨2⟩
1 {⟨𝕩⟩}{F _r_ G: {𝕊𝕩: F𝕩 ; 𝕨𝕊𝕩: 𝕨G𝕩}}{⟨𝕨,𝕩⟩} 2 # 1‿2