mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
POSIX leaves undefined the order of output if stderr is injected into stdout, and in practice it differs on Windows (Linux buffers both streams separately, Windows interleaves them as they arrive without buffering). This should help testing on other platforms
59 lines
1.6 KiB
Bash
Executable File
59 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
export LC_ALL=C
|
|
|
|
o=$(mktemp)
|
|
gb=$(mktemp)
|
|
input=$(mktemp)
|
|
output=$(mktemp)
|
|
errput=$(mktemp)
|
|
rc=0
|
|
|
|
for i in *.asm; do
|
|
for variant in '' '.pipe'; do
|
|
if [ -z "$variant" ]; then
|
|
../../rgbasm -Weverything -o $o $i > $output 2> $errput
|
|
desired_output=${i%.asm}.out
|
|
desired_errput=${i%.asm}.err
|
|
else
|
|
# `include-recursion.asm` refers to its own name inside the test code.
|
|
# Skip testing with stdin input for that file.
|
|
if [ "$i" = "include-recursion.asm" ]; then
|
|
continue
|
|
fi
|
|
|
|
# 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 and was broken when the feature was
|
|
# first implemented.
|
|
cat $i | ../../rgbasm -Weverything -o $o - > $output 2> $errput
|
|
|
|
# Use two otherwise unused files for temp storage
|
|
desired_output=$input
|
|
desired_errput=$gb
|
|
# Escape regex metacharacters
|
|
subst="$(printf '%s\n' "$i" | sed 's:[][\/.^$*]:\\&:g')"
|
|
# Replace the file name with a dash to match changed output
|
|
sed "s/$subst/-/g" ${i%.asm}.out > $desired_output
|
|
sed "s/$subst/-/g" ${i%.asm}.err > $desired_errput
|
|
fi
|
|
|
|
diff -u $desired_output $output
|
|
rc=$(($? || $rc))
|
|
diff -u $desired_errput $errput
|
|
rc=$(($? || $rc))
|
|
|
|
bin=${i%.asm}.out.bin
|
|
if [ -f $bin ]; then
|
|
../../rgblink -o $gb $o > $output 2>&1
|
|
dd if=$gb count=1 bs=$(printf %s $(wc -c < $bin)) > $output 2>/dev/null
|
|
hexdump -C $output > $input && mv $input $output
|
|
hexdump -C $bin > $input
|
|
diff -u $input $output
|
|
rc=$(($? || $rc))
|
|
fi
|
|
done
|
|
done
|
|
|
|
rm -f $o $gb $input $output
|
|
exit $rc
|