mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
* Fix compatibility of rgblink -O and -t The -t "tiny mode" option makes ROM0 cover 0x8000 bytes, not 0x4000. The -O "overlay" option fills areas uncovered by sections with data from an overlay file. These needed to cooperate so that the calculated uncovered overlay size does not exceed the actual size of the ROM. Fixes #754 * Print link test names like asm tests do * Make the three test.sh scripts more similar
102 lines
2.5 KiB
Bash
Executable File
102 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
export LC_ALL=C
|
|
|
|
tmpdir="$(mktemp -d)"
|
|
src="$PWD"
|
|
rc=0
|
|
|
|
cp ../../{rgbfix,contrib/gbdiff.bash} "$tmpdir"
|
|
cd "$tmpdir"
|
|
trap "cd; rm -rf '$tmpdir'" EXIT
|
|
|
|
bold="$(tput bold)"
|
|
resbold="$(tput sgr0)"
|
|
red="$(tput setaf 1)"
|
|
green="$(tput setaf 2)"
|
|
rescolors="$(tput op)"
|
|
|
|
RGBFIX=./rgbfix
|
|
|
|
tryDiff () {
|
|
if ! diff -u --strip-trailing-cr "$1" "$2"; then
|
|
echo "${bold}${red}${3:-$1} mismatch!${rescolors}${resbold}"
|
|
false
|
|
fi
|
|
}
|
|
|
|
tryCmp () {
|
|
if ! cmp "$1" "$2"; then
|
|
./gbdiff.bash "$1" "$2"
|
|
echo "${bold}${red}${3:-$1} mismatch!${rescolors}${resbold}"
|
|
false
|
|
fi
|
|
}
|
|
|
|
runTest () {
|
|
flags="$(head -n 1 "$2/$1.flags")" # Allow other lines to serve as comments
|
|
|
|
for variant in '' ' piped'; do
|
|
our_rc=0
|
|
if [[ $progress -ne 0 ]]; then
|
|
echo "${bold}${green}$1${variant}...${rescolors}${resbold}"
|
|
fi
|
|
if [[ -z "$variant" ]]; then
|
|
cp "$2/$1.bin" out.gb
|
|
if [[ -n "$(eval $RGBFIX $flags out.gb '2>out.err')" ]]; then
|
|
echo "${bold}${red}Fixing $1 in-place shouldn't output anything on stdout!${rescolors}${resbold}"
|
|
our_rc=1
|
|
fi
|
|
subst='out.gb'
|
|
else
|
|
# Stop! This is not a Useless Use Of Cat. Using cat instead of
|
|
# stdin redirection makes the input an unseekable pipe - a scenario
|
|
# that's harder to deal with.
|
|
cat "$2/$1.bin" | eval $RGBFIX "$flags" '>out.gb' '2>out.err'
|
|
subst='<stdin>'
|
|
fi
|
|
|
|
sed "s/$subst/<filename>/g" "out.err" | tryDiff "$2/$1.err" - "$1.err${variant}"
|
|
our_rc=$(($? || $our_rc))
|
|
if [[ -r "$2/$1.gb" ]]; then
|
|
tryCmp "$2/$1.gb" "out.gb" "$1.gb${variant}"
|
|
our_rc=$(($? || $our_rc))
|
|
fi
|
|
|
|
rc=$(($rc || $our_rc))
|
|
if [[ $our_rc -ne 0 ]]; then break; fi
|
|
done
|
|
}
|
|
|
|
rm -f padding*_* # Delete padding test cases generated but not deleted (e.g. interrupted)
|
|
|
|
progress=1
|
|
for i in "$src"/*.bin; do
|
|
runTest "$(basename "$i" .bin)" "$src"
|
|
done
|
|
|
|
# Check the result with all different padding bytes
|
|
echo "${bold}Checking padding...${resbold}"
|
|
cp "$src"/padding{,-large,-larger}.bin .
|
|
touch padding{,-large,-larger}.err
|
|
progress=0
|
|
for b in {0..254}; do
|
|
printf "\r$b..."
|
|
for suffix in '' -large -larger; do
|
|
cat <<<'-p $b' >padding$suffix.flags
|
|
tr '\377' \\$(($b / 64))$((($b / 8) % 8))$(($b % 8)) <"$src/padding$suffix.gb" >padding$suffix.gb # OK because $FF bytes are only used for padding
|
|
runTest padding${suffix} .
|
|
done
|
|
done
|
|
printf "\rDone! \n"
|
|
|
|
# TODO: check MBC names
|
|
|
|
# Check that RGBFIX errors out when inputting a non-existent file...
|
|
$RGBFIX noexist 2>out.err
|
|
rc=$(($rc || $? != 1))
|
|
tryDiff "$src/noexist.err" out.err noexist.err
|
|
rc=$(($rc || $?))
|
|
|
|
exit $rc
|