FILE=malloc://1024
NAME=?vi-1
CMDS=<<EOF
?vi 0xffffffff
?vi8 0xffffffff
?vi4 0xffffffff
?vi2 0xffffffff
?vi1 0xffffffff
?vi4 0xffffffff
?vi2 0xffff
?vi1 0xff
EOF
EXPECT=<<EOF
4294967295
4294967295
-1
-1
-1
-1
-1
-1
EOF
RUN

FILE=malloc://1024
NAME=?vi-8
CMDS=<<EOF
?vi 0xfffffff8
?vi4 0xfffffff8
?vi2 0xfffffff8
?vi1 0xfffffff8
?vi4 0xfffffff8
?vi2 0xfff8
?vi1 0xf8
EOF
EXPECT=<<EOF
4294967288
-8
-8
-8
-8
-8
-8
EOF
RUN

FILE=malloc://1024
CMDS=<<EOF
?v
?=
??
?e
?b
?f
?p
?s
?x
?X
?l
?t
?!
?+
?-
EOF
EXPECT=<<EOF
0
0x0
0

0b
0x00000000

0
0
0x0
0x0
0x0
EOF
RUN

NAME=?e
FILE=malloc://1024
CMDS=<<EOF
?e foo
?e bar
EOF
EXPECT=<<EOF
foo
bar
EOF
RUN


NAME=?v
FILE=--
CMDS=<<EOF
?v 1024
?v 0x42
EOF
EXPECT=<<EOF
0x400
0x42
EOF
RUN


NAME="?v 'A'"
FILE=--
CMDS=?v 'A'
EXPECT=<<EOF
0x41
EOF
RUN

NAME="?v 'A'+3"
FILE=--
CMDS=?v 'A'+3
EXPECT=<<EOF
0x44
EOF
RUN

NAME="?v 3+'A'-3"
FILE=--
CMDS=?v 3+'A'-3
EXPECT=<<EOF
0x41
EOF
RUN

NAME="?v 33^'A'"
FILE=--
CMDS=?v 32^'A'
EXPECT=<<EOF
0x61
EOF
RUN

NAME="? 1;?v"
FILE=--
CMDS=? 1;?v
EXPECT=<<EOF
int32   1
uint32  1
hex     0x1
octal   01
unit    1
segment 0000:0001
string  "\x01"
fvalue: 1.0
float:  0.000000f
double: 0.000000
binary  0b00000001
trits   0t1
1
EOF
RUN

NAME="? 0;?v"
FILE=--
CMDS=? 0;?v
EXPECT=<<EOF
int32   0
uint32  0
hex     0x0
octal   00
unit    0
segment 0000:0000
string  "\0"
fvalue: 0.0
float:  0.000000f
double: 0.000000
binary  0b00000000
trits   0t0
0
EOF
RUN

NAME="? -1"
FILE=--
CMDS=? -1
EXPECT=<<EOF
int64   -1
uint64  18446744073709551615
hex     0xffffffffffffffff
octal   01777777777777777777777
unit    16E
segment fffff000:0fff
string  "\xff\xff\xff\xff\xff\xff\xff\xff"
fvalue: -1.0
float:  nanf
double: nan
binary  0b1111111111111111111111111111111111111111111111111111111111111111
trits   0t11112220022122120101211020120210210211220
EOF
RUN

NAME="? 2*1.5"
FILE=--
CMDS=? 2*1.5
EXPECT=<<EOF
int32   2
uint32  2
hex     0x2
octal   02
unit    2
segment 0000:0002
string  "\x02"
fvalue: 3.0
float:  0.000000f
double: 0.000000
binary  0b00000010
trits   0t2
EOF
RUN

NAME="base help"
FILE=-
CMDS=<<EOF
?~+print?
EOF
EXPECT=<<EOF
3
EOF
RUN

NAME="help help"
FILE=-
CMDS=<<EOF
???~Usage
EOF
EXPECT=<<EOF
Usage: ?[?[?]] expression   
EOF
RUN

NAME=expr with parentheses
FILE=-
CMDS=<<EOF
?v (0x10000192c + 4294965314) & 0xffffffff
EOF
EXPECT=<<EOF
0x116e
EOF
RUN

NAME=recursive help
FILE=-
CMDS=<<EOF
?* zi
EOF
EXPECT=<<EOF
| zi                   # Show zignatures matching information
| zij                  # Show zignatures matching information (JSON mode)
| zi*                  # Show zignatures matching information (rizin mode)
| ziq                  # Show zignatures matching information (quiet mode)
| zii <from> <to>      # Show zignatures matching information in range
EOF
RUN

NAME=recursive help (json)
FILE=-
CMDS=<<EOF
?*j zi
EOF
EXPECT=<<EOF
{"zi":{"cmd":"zi","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information"},"zij":{"cmd":"zij","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (JSON mode)"},"zi*":{"cmd":"zi*","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (rizin mode)"},"ziq":{"cmd":"ziq","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (quiet mode)"},"zii":{"cmd":"zii","type":"argv","args_str":" <from> <to>","args":[{"type":"number","name":"from","required":true},{"type":"number","name":"to","required":true}],"description":"","summary":"Show zignatures matching information in range"}}
EOF
RUN


NAME=old recursive help
FILE=-
CMDS=<<EOF
zi?*
EOF
EXPECT=<<EOF
| zi                   # Show zignatures matching information
| zij                  # Show zignatures matching information (JSON mode)
| zi*                  # Show zignatures matching information (rizin mode)
| ziq                  # Show zignatures matching information (quiet mode)
| zii <from> <to>      # Show zignatures matching information in range
EOF
RUN

NAME=old recursive help (json)
FILE=-
CMDS=<<EOF
zi?*j
EOF
EXPECT=<<EOF
{"zi":{"cmd":"zi","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information"},"zij":{"cmd":"zij","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (JSON mode)"},"zi*":{"cmd":"zi*","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (rizin mode)"},"ziq":{"cmd":"ziq","type":"argv_modes","args_str":"","args":[],"description":"","summary":"Show zignatures matching information (quiet mode)"},"zii":{"cmd":"zii","type":"argv","args_str":" <from> <to>","args":[{"type":"number","name":"from","required":true},{"type":"number","name":"to","required":true}],"description":"","summary":"Show zignatures matching information in range"}}
EOF
RUN

