mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Enable more testing of RGBGFX output (#1473)
This commit is contained in:
@@ -130,13 +130,32 @@ Additionally, if a `.gb` file exists, the output of RGBFIX must match the `.gb`.
|
|||||||
|
|
||||||
### RGBGFX
|
### RGBGFX
|
||||||
|
|
||||||
|
There are three kinds of test.
|
||||||
|
|
||||||
|
#### Simple tests
|
||||||
|
|
||||||
Each `.png` file corresponds to one test.
|
Each `.png` file corresponds to one test.
|
||||||
RGBGFX will be invoked on the file.
|
RGBGFX will be invoked on the file.
|
||||||
If a `.flags` file exists, it will be used as part of the RGBGFX invocation (<code>@<var><file></var>.flags</code>).
|
If a `.flags` file exists, it will be used as part of the RGBGFX invocation (<code>@<var><file></var>.flags</code>).
|
||||||
|
|
||||||
|
If `.out.1bpp`, `.out.2bpp`, `.out.pal`, `.out.tilemap`, `.out.attrmap`, or `.out.palmap` files exist, RGBGFX will create the corresponding kind of output, which must match the file's contents.
|
||||||
|
Multiple kinds of output may be tested for the same input.
|
||||||
|
|
||||||
If no `.err` file exists, RGBGFX is simply expected to be able to process the file normally.
|
If no `.err` file exists, RGBGFX is simply expected to be able to process the file normally.
|
||||||
If one *does* exist, RGBGFX's return status is ignored, but its output **must** match the `.err` file's contents.
|
If one *does* exist, RGBGFX's return status is ignored, but its output **must** match the `.err` file's contents.
|
||||||
|
|
||||||
|
#### Reverse tests
|
||||||
|
|
||||||
|
Each `.1bpp` or `.2bpp` file corresponds to one test.
|
||||||
|
RGBGFX will be invoked on the file with `-r 1` for reverse mode, then invoked on the output without `-r 1`.
|
||||||
|
The round-trip output must match the input file's contents.
|
||||||
|
If a `.flags` file exists, it will be used as part of the RGBGFX invocation (<code>@<var><file></var>.flags</code>).
|
||||||
|
|
||||||
|
#### Random seed tests
|
||||||
|
|
||||||
|
Each `seed*.bin` file corresponds to one test.
|
||||||
|
Each one is a binary RNG file which is passed to the `rgbgfx_test` program.
|
||||||
|
|
||||||
### Downstream projects
|
### Downstream projects
|
||||||
|
|
||||||
1. Make sure the downstream project supports <code>make <var><target></var> RGBDS=<var><path/to/RGBDS/></var></code>.
|
1. Make sure the downstream project supports <code>make <var><target></var> RGBDS=<var><path/to/RGBDS/></var></code>.
|
||||||
|
|||||||
13
test/gfx/.gitignore
vendored
13
test/gfx/.gitignore
vendored
@@ -3,10 +3,11 @@
|
|||||||
/rgbgfx_test
|
/rgbgfx_test
|
||||||
# Generated by randtilegen
|
# Generated by randtilegen
|
||||||
/out*.png
|
/out*.png
|
||||||
/*.rng
|
# Generated by tests
|
||||||
# Generated by the test program
|
|
||||||
/result.2bpp
|
|
||||||
/result.tilemap
|
|
||||||
/result.pal
|
|
||||||
/result.attrmap
|
|
||||||
/result.png
|
/result.png
|
||||||
|
/result.1bpp
|
||||||
|
/result.2bpp
|
||||||
|
/result.pal
|
||||||
|
/result.tilemap
|
||||||
|
/result.attrmap
|
||||||
|
/result.palmap
|
||||||
|
|||||||
BIN
test/gfx/crop.out.2bpp
Normal file
BIN
test/gfx/crop.out.2bpp
Normal file
Binary file not shown.
1
test/gfx/crop.out.pal
Normal file
1
test/gfx/crop.out.pal
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
BIN
test/gfx/empty_lines.out.2bpp
Normal file
BIN
test/gfx/empty_lines.out.2bpp
Normal file
Binary file not shown.
1
test/gfx/empty_lines.out.pal
Normal file
1
test/gfx/empty_lines.out.pal
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<EFBFBD>lU<EFBFBD><EFBFBD><EFBFBD>
|
||||||
BIN
test/gfx/full_gpl.out.2bpp
Normal file
BIN
test/gfx/full_gpl.out.2bpp
Normal file
Binary file not shown.
BIN
test/gfx/full_gpl.out.attrmap
Normal file
BIN
test/gfx/full_gpl.out.attrmap
Normal file
Binary file not shown.
BIN
test/gfx/full_gpl.out.pal
Normal file
BIN
test/gfx/full_gpl.out.pal
Normal file
Binary file not shown.
BIN
test/gfx/full_gpl.out.tilemap
Normal file
BIN
test/gfx/full_gpl.out.tilemap
Normal file
Binary file not shown.
BIN
test/gfx/full_hex.out.2bpp
Normal file
BIN
test/gfx/full_hex.out.2bpp
Normal file
Binary file not shown.
BIN
test/gfx/full_hex.out.attrmap
Normal file
BIN
test/gfx/full_hex.out.attrmap
Normal file
Binary file not shown.
BIN
test/gfx/full_hex.out.pal
Normal file
BIN
test/gfx/full_hex.out.pal
Normal file
Binary file not shown.
BIN
test/gfx/full_hex.out.tilemap
Normal file
BIN
test/gfx/full_hex.out.tilemap
Normal file
Binary file not shown.
1
test/gfx/multiple_manual_pals.out.2bpp
Normal file
1
test/gfx/multiple_manual_pals.out.2bpp
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.]<02>t<0B><17>/<2F>_K<5F>
|
||||||
BIN
test/gfx/multiple_manual_pals.out.pal
Normal file
BIN
test/gfx/multiple_manual_pals.out.pal
Normal file
Binary file not shown.
1
test/gfx/none_round_trip.flags
Normal file
1
test/gfx/none_round_trip.flags
Normal file
@@ -0,0 +1 @@
|
|||||||
|
-c#none,#fff,#000
|
||||||
@@ -7,7 +7,7 @@ errtmp="$(mktemp)"
|
|||||||
|
|
||||||
# Immediate expansion is the desired behavior.
|
# Immediate expansion is the desired behavior.
|
||||||
# shellcheck disable=SC2064
|
# shellcheck disable=SC2064
|
||||||
trap "rm -f ${errtmp@Q}" EXIT
|
trap "rm -f ${errtmp@Q} result.{png,1bpp,2bpp,pal,tilemap,attrmap,palmap} out*.png" EXIT
|
||||||
|
|
||||||
tests=0
|
tests=0
|
||||||
failed=0
|
failed=0
|
||||||
@@ -37,37 +37,47 @@ failTest () {
|
|||||||
echo "${bold}${red}Test ${cmdline} failed!${1:+ (RC=$1)}${rescolors}${resbold}"
|
echo "${bold}${red}Test ${cmdline} failed!${1:+ (RC=$1)}${rescolors}${resbold}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkOutput () {
|
||||||
|
out_rc=0
|
||||||
|
for ext in 1bpp 2bpp pal tilemap attrmap palmap; do
|
||||||
|
if [[ -e "$1.out.$ext" ]]; then
|
||||||
|
cmp "$1.out.$ext" "result.$ext"
|
||||||
|
(( out_rc = out_rc || $? ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return $out_rc
|
||||||
|
}
|
||||||
|
|
||||||
# Draw a random tile offset and VRAM0 size
|
# Draw a random tile offset and VRAM0 size
|
||||||
# Neither should change anything to how the image is displayed
|
# Neither should change anything to how the image is displayed
|
||||||
while [[ "$ofs" -eq 0 ]]; do (( ofs = RANDOM % 256 )); done
|
while [[ "$ofs" -eq 0 ]]; do (( ofs = RANDOM % 256 )); done
|
||||||
while [[ "$size" -eq 0 ]]; do (( size = RANDOM % 256 )); done
|
while [[ "$size" -eq 0 ]]; do (( size = RANDOM % 256 )); done
|
||||||
for f in *.bin; do
|
for f in seed*.bin; do
|
||||||
for flags in ""{," -b $ofs"}{," -N $size,256"}; do
|
for flags in ""{," -b $ofs"}{," -N $size,256"}; do
|
||||||
newTest ./rgbgfx_test "$f" $flags
|
newTest ./rgbgfx_test "$f" $flags
|
||||||
runTest || failTest $?
|
runTest || failTest $?
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
# Test round-tripping '-r' with '-c #none'
|
|
||||||
reverse_cmd="$RGBGFX -c#none,#fff,#000 -o none_round_trip.2bpp -r 1 out.png"
|
|
||||||
reconvert_cmd="$RGBGFX -c#none,#fff,#000 -o result.2bpp out.png"
|
|
||||||
compare_cmd="cmp none_round_trip.2bpp result.2bpp"
|
|
||||||
newTest "$reverse_cmd && $reconvert_cmd && $compare_cmd"
|
|
||||||
runTest || failTest $?
|
|
||||||
|
|
||||||
# Remove temporaries (also ignored by Git) created by the above tests
|
|
||||||
rm -f out*.png result.png result.2bpp
|
|
||||||
|
|
||||||
for f in *.png; do
|
for f in *.png; do
|
||||||
|
# Do not process outputs of other tests as test inputs themselves
|
||||||
|
if [[ "$f" = result.png ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
flags="$([[ -e "${f%.png}.flags" ]] && echo "@${f%.png}.flags")"
|
flags="$([[ -e "${f%.png}.flags" ]] && echo "@${f%.png}.flags")"
|
||||||
|
for f_ext in o_1bpp o_2bpp p_pal t_tilemap a_attrmap q_palmap; do
|
||||||
|
if [[ -e "${f%.png}.out.${f_ext#*_}" ]]; then
|
||||||
|
flags="$flags -${f_ext%_*} result.${f_ext#*_}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
newTest "$RGBGFX" $flags "$f"
|
newTest "$RGBGFX" $flags "$f"
|
||||||
if [[ -e "${f%.png}.err" ]]; then
|
if [[ -e "${f%.png}.err" ]]; then
|
||||||
runTest 2>"$errtmp"
|
runTest 2>"$errtmp"
|
||||||
diff -u --strip-trailing-cr "${f%.png}.err" "$errtmp" || failTest
|
diff -u --strip-trailing-cr "${f%.png}.err" "$errtmp" || failTest
|
||||||
else
|
else
|
||||||
runTest || failTest $?
|
runTest && checkOutput "${f%.png}" || failTest $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
newTest "$RGBGFX" $flags - "<$f"
|
newTest "$RGBGFX" $flags - "<$f"
|
||||||
@@ -75,10 +85,22 @@ for f in *.png; do
|
|||||||
runTest 2>"$errtmp"
|
runTest 2>"$errtmp"
|
||||||
diff -u --strip-trailing-cr <(sed "s/$f/<stdin>/g" "${f%.png}.err") "$errtmp" || failTest
|
diff -u --strip-trailing-cr <(sed "s/$f/<stdin>/g" "${f%.png}.err") "$errtmp" || failTest
|
||||||
else
|
else
|
||||||
runTest || failTest $?
|
runTest && checkOutput "${f%.png}" || failTest $?
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for f in *.[12]bpp; do
|
||||||
|
# Do not process outputs or sample outputs of other tests as test inputs themselves
|
||||||
|
if [[ "$f" = result.[12]bpp ]] || [[ "$f" = *.out.[12]bpp ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
flags="$([[ -e "${f%.[12]bpp}.flags" ]] && echo "@${f%.[12]bpp}.flags")"
|
||||||
|
|
||||||
|
newTest "$RGBGFX $flags -o $f -r 1 result.png && $RGBGFX $flags -o result.2bpp result.png"
|
||||||
|
runTest && cmp "$f" result.2bpp || failTest $?
|
||||||
|
done
|
||||||
|
|
||||||
if [[ "$failed" -eq 0 ]]; then
|
if [[ "$failed" -eq 0 ]]; then
|
||||||
echo "${bold}${green}All ${tests} tests passed!${rescolors}${resbold}"
|
echo "${bold}${green}All ${tests} tests passed!${rescolors}${resbold}"
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user