NAME=(msg x;echo ${x})
FILE==
CMDS=<<EOF
(msg x;echo ${x})
.(msg HelloWorld)
EOF
EXPECT=<<EOF
HelloWorld
EOF
RUN

NAME=(msg x;echo ${x})
FILE==
CMDS=<<EOF
(msg x;echo ${x})
.(msg HelloWorld)
echo hiz
EOF
EXPECT=<<EOF
HelloWorld
hiz
EOF
RUN

NAME=.(msg x y;echo ${x} ${y})
FILE==
CMDS=<<EOF
(msg x y;echo ${x} ${y})
.(msg Hello World)
EOF
EXPECT=<<EOF
Hello World
EOF
RUN

NAME=.(msg "foo bar")
FILE==
CMDS=<<EOF
(msg x;echo ${x})
.(msg "Hello World")
EOF
EXPECT=<<EOF
Hello World
EOF
RUN

NAME=.(msg foo\ bar)
FILE==
CMDS=<<EOF
(msg x;echo ${x})
.(msg Hello\ World)
EOF
EXPECT=<<EOF
Hello World
EOF
RUN

NAME=(*~?
FILE==
CMDS=<<EOF
(foo;bar)
(bar;cow)
(*~?
EOF
EXPECT=<<EOF
2
EOF
RUN

NAME=3(foo inc;p8 4;sd +${inc})(1)
FILE==
CMDS=<<EOF
wx 010203040506070809
3(foo inc;p8 4;sd +${inc})(1)
EOF
EXPECT=<<EOF
01020304
02030405
03040506
EOF
RUN

NAME=3(foo;echo a;echo b)()
FILE==
CMDS=2(foo;echo a;echo b)()
EXPECT=<<EOF
a
b
a
b
EOF
RUN

NAME=%v $$ @@f:foo*
FILE==
CMDS=<<EOF
f foo.one @ 1
f foo.bar @ 2
f foo.cow @ 3
%v $$ @@f:foo*
EOF
EXPECT=<<EOF
0x1
0x2
0x3
EOF
RUN

NAME=%v
FILE==
CMDS=<<EOF
f foo.one @ 1
f foo.bar @ 2
f foo.cow @ 3
(_;%v $$)() @@f:foo*
EOF
EXPECT=<<EOF
0x1
0x2
0x3
EOF
RUN

NAME=multiple commands
FILE==
CMDS=<<EOF
(foo x y; p8 ${x} @ ${y}; echo Hello ${x})(2 0)
(bar x y; p8 ${x} @ ${y}; echo Hello ${x}; echo World ${y})(1 0)
(zas x y; .(foo ${y} ${x}))(3 1)
EOF
EXPECT=<<EOF
0000
Hello 2
00
Hello 1
World 0
00
Hello 1
EOF
RUN

NAME=..(
FILE==
CMDS=<<EOF
(foo1 fst; echo ${fst})
(foo2 fst snd; echo ${fst}; %v ${snd})
..(foo1 xyz)
echo -----
..(foo1 abc def)
echo -----
..(foo2 xyz 11)
echo -----
..(foo2 abc 10 def 9)
EOF
EXPECT=<<EOF
xyz
-----
abc
def
-----
xyz
0xb
-----
abc
0xa
def
0x9
EOF
RUN

NAME=arity errors
FILE==
CMDS=<<EOF
(foo0; echo foo0)
.(foo0 1)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo0' expects 0 args, not 1
ERROR: core: Error while executing command: .(foo0 1)
EOF
RUN

NAME=arity errors 2
FILE==
CMDS=<<EOF
(foo0; echo foo0)
..(foo0 1)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo0' expects 0 args, not 1
ERROR: core: Error while executing command: ..(foo0 1)
EOF
RUN

NAME=arity errors 3
FILE==
CMDS=<<EOF
(foo1 fst; echo foo1 ${fst})
.(foo1)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo1' expects 1 args, not 0
ERROR: core: Error while executing command: .(foo1)
EOF
RUN

NAME=arity errors 4
FILE==
CMDS=<<EOF
(foo1 fst; echo foo1 ${fst})
.(foo1 1 2)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo1' expects 1 args, not 2
ERROR: core: Error while executing command: .(foo1 1 2)
EOF
RUN

NAME=arity errors 5
FILE==
CMDS=<<EOF
(foo1 fst; echo foo1 ${fst})
..(foo1)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo1' expects 1 args, not 0
ERROR: core: Error while executing command: ..(foo1)
EOF
RUN

NAME=arity errors 6
FILE==
CMDS=<<EOF
(foo2 fst snd; echo foo2_0 ${fst}; echo foo2_1 ${snd})
..(foo2 1)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo2' expects 2 args and 1 is not a multiple of 2
ERROR: core: Error while executing command: ..(foo2 1)
EOF
RUN

NAME=arity errors 7
FILE==
CMDS=<<EOF
(foo2 fst snd; echo foo2_0 ${fst}; echo foo2_1 ${snd})
..(foo2)
EOF
EXPECT_ERR=<<EOF
ERROR: Macro 'foo2' expects 2 args, not 0
ERROR: core: Error while executing command: ..(foo2)
EOF
RUN
