NAME=b
FILE=-
CMDS=<<EOF
b 100
b
EOF
EXPECT=<<EOF
0x64
EOF
RUN

NAME=b updates its command context
FILE=-
CMDS=<<EOF
b 64;b;b+4;b;b-2;b
EOF
EXPECT=<<EOF
0x40
0x44
0x42
EOF
RUN

NAME=b command token help suffixes
FILE=-
CMDS=<<EOF
b?~?change working block size
bf?~?set block size to flag size
bm?~?set max block size
bj?~?display block size information in JSON
b*?~?display current block size in r2 command
b+?~?increase blocksize by 3
b-?~?decrease blocksize by 16
b64:?~?execute a base64-encoded r2 script
bg?~?run command in background
EOF
EXPECT=<<EOF
1
1
1
1
1
1
1
1
1
EOF
EXPECT_ERR=
RUN

NAME=b64 raw command help suffix
FILE=-
CMDS=b64:'?
EXPECT=<<EOF
| b64:AA=   execute a base64-encoded r2 script
| b64:'AA=  execute a base64-encoded command without evaluating special chars
EOF
EXPECT_ERR=
RUN

NAME=b help and invalid arithmetic do not change block size
FILE=-
CMDS=<<EOF
b 32
b+?~__no_help_line__
b-?~__no_help_line__
b
b-33
b
b+0xffffffffffffffff
b
b-0xffffffffffffffff
b
b 0xffffffffffffffff
b
bm 0x100000000
bm
EOF
EXPECT=<<EOF
0x20
0x20
0x20
0x20
0x20
0x3200000
EOF
RUN

NAME=bj
FILE=-
CMDS=<<EOF
b 100
bj
EOF
EXPECT=<<EOF
{"blocksize":100,"blocksize_limit":52428800}
EOF
RUN

NAME=bj preserves unsigned block size limit
FILE=-
CMDS=<<EOF
bm 0xffffffff
bj
EOF
EXPECT=<<EOF
{"blocksize":256,"blocksize_limit":4294967295}
EOF
RUN

NAME=b64
FILE=-
CMDS=<<EOF
b64?
"p6es ?e hello;?e world"
b64:`_`
b64:'P2UgaGVsbG87P2Ugd29ybGQ=
b64:P2UgZmlyc3QKP2Ugc2Vjb25k
b64:ZWNobyBoZWxsbwojIGNvbW1lbnQKZWNobyB3b3JsZAo=
p6ds P2UgaGVsbG87P2Ugd29ybGQ=
`p6ds P2UgaGVsbG87P2Ugd29ybGQ=`
EOF
EXPECT=<<EOF
| b64:AA=   execute a base64-encoded r2 script
| b64:'AA=  execute a base64-encoded command without evaluating special chars
P2UgaGVsbG87P2Ugd29ybGQ=
hello
world
hello;?e world
first
second
hello
world
?e hello;?e world
hello
world
EOF
RUN
