add support for raw and aiff input in the multifile tests; also add proper checking for the correct operation of --sector-align
diff --git a/test/test_flac.sh b/test/test_flac.sh
index 20f6a4e..0713e06 100755
--- a/test/test_flac.sh
+++ b/test/test_flac.sh
@@ -184,7 +184,7 @@
 # first make some chopped-up raw files
 #
 echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
-dddie="die ERROR: creating files for --skip/--until tests"
+dddie="die ERROR: creating files with dd"
 dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
 dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
 dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
@@ -213,47 +213,47 @@
 #
 convert_to_wav ()
 {
-	run_flac $raw_eopt $1.raw || die "ERROR converting $1.raw to WAVE"
-	run_flac $wav_dopt $1.flac || die "ERROR converting $1.raw to WAVE"
+	run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
+	run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
 }
-convert_to_wav 50c
-convert_to_wav 50c.skip10
-convert_to_wav 50c.skip11
-convert_to_wav 50c.skip20
-convert_to_wav 50c.skip30
-convert_to_wav 50c.skip40
-convert_to_wav 50c.until10
-convert_to_wav 50c.until20
-convert_to_wav 50c.until30
-convert_to_wav 50c.until39
-convert_to_wav 50c.until40
-convert_to_wav 50c.skip10.until30
-convert_to_wav 50c.skip10.until39
-convert_to_wav 50c.skip10.until40
-convert_to_wav 50c.skip20.until30
-convert_to_wav 50c.skip20.until40
+convert_to_wav 50c "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
+convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
 
 convert_to_aiff ()
 {
-	run_flac $raw_eopt $1.raw || die "ERROR converting $1.raw to AIFF"
-	run_flac $wav_dopt $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
+	run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
+	run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
 }
-convert_to_aiff 50c
-convert_to_aiff 50c.skip10
-convert_to_aiff 50c.skip11
-convert_to_aiff 50c.skip20
-convert_to_aiff 50c.skip30
-convert_to_aiff 50c.skip40
-convert_to_aiff 50c.until10
-convert_to_aiff 50c.until20
-convert_to_aiff 50c.until30
-convert_to_aiff 50c.until39
-convert_to_aiff 50c.until40
-convert_to_aiff 50c.skip10.until30
-convert_to_aiff 50c.skip10.until39
-convert_to_aiff 50c.skip10.until40
-convert_to_aiff 50c.skip20.until30
-convert_to_aiff 50c.skip20.until40
+convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
+convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
 
 test_skip_until ()
 {
@@ -545,13 +545,13 @@
 run_flac --verify --force --silent --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=576 noise.raw || die "ERROR generating FLAC file"
 
 if [ $is_win = no ] ; then
-	total_samples=`run_metaflac --show-total-samples noise.flac`
+	total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
 	[ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
 else
 	# some flavors of cygwin don't seem to treat the \x0d as a word
 	# separator, so we hard code it.  we'll just have to fix it later
 	# if we change the way noise.flac is made.
-	total_samples=393216
+	total_noise_cdda_samples=393216
 fi
 
 echo -n "testing --skip=0... "
@@ -559,7 +559,7 @@
 echo OK
 
 for delta in 2 1 ; do
-	n=`expr $total_samples - $delta`
+	n=`expr $total_noise_cdda_samples - $delta`
 	echo -n "testing --skip=$n... "
 	run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
 	echo OK
@@ -769,7 +769,7 @@
 echo -n "WAVE fixup test... "
 
 echo -n "prepare... "
-convert_to_wav noise || die "ERROR creating reference WAVE"
+convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
 
 echo -n "encode... "
 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
@@ -794,7 +794,7 @@
 echo -n "AIFF fixup test... "
 
 echo -n "prepare... "
-convert_to_aiff noise || die "ERROR creating reference AIFF"
+convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
 
 echo -n "encode... "
 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
@@ -822,18 +822,73 @@
 ############################################################################
 
 echo "Generating multiple input files from noise..."
-run_flac --verify --force --silent --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 noise.raw || die "ERROR generating FLAC file"
+multifile_format_decode="--endian=big --sign=signed"
+multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2"
+run_flac --verify --force --silent --force-raw-format $multifile_format_encode noise.raw || die "ERROR generating FLAC file"
 run_flac --decode --force --silent noise.flac || die "ERROR generating WAVE file"
+run_flac --decode --force --silent noise.flac -o noise.aiff || die "ERROR generating AIFF file"
 rm -f noise.flac
-mv noise.wav file0.wav
-cp file0.wav file1.wav
-cp file1.wav file2.wav
+cp noise.wav file0.wav
+cp noise.wav file1.wav
+cp noise.wav file2.wav
+rm -f noise.wav
+cp noise.aiff file0.aiff
+cp noise.aiff file1.aiff
+cp noise.aiff file2.aiff
+rm -f noise.aiff
+cp noise.raw file0.raw
+cp noise.raw file1.raw
+cp noise.raw file2.raw
+# create authoritative sector-aligned files for comparison
+file0_samples=`expr \( $total_noise_cdda_samples / 588 \) \* 588`
+file0_remainder=`expr $total_noise_cdda_samples - $file0_samples`
+file1_samples=`expr \( \( $file0_remainder + $total_noise_cdda_samples \) / 588 \) \* 588`
+file1_remainder=`expr $file0_remainder + $total_noise_cdda_samples - $file1_samples`
+file1_samples=`expr $file1_samples - $file0_remainder`
+file2_samples=`expr \( \( $file1_remainder + $total_noise_cdda_samples \) / 588 \) \* 588`
+file2_remainder=`expr $file1_remainder + $total_noise_cdda_samples - $file2_samples`
+file2_samples=`expr $file2_samples - $file1_remainder`
+if [ $file2_remainder != '0' ] ; then
+	file2_samples=`expr $file2_samples + $file2_remainder`
+	file2_remainder=`expr 588 - $file2_remainder`
+fi
+
+dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
+dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
+dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
+cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
+dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
+dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
+cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
+dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
+cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
+rm -f z.raw
+
+convert_to_wav file0s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
+convert_to_wav file1s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
+convert_to_wav file2s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
+
+convert_to_aiff file0s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
+convert_to_aiff file1s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
+convert_to_aiff file2s "$multifile_format_encode --force" "--silent --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
 
 test_multifile ()
 {
-	streamtype=$1
-	sector_align=$2
-	encode_options="$3"
+	input_type=$1
+	streamtype=$2
+	sector_align=$3
+	encode_options="$4"
+
+	extra_encode_options=""
+	extra_decode_options=""
+	if [ $input_type = "raw" ] ; then
+		extra_encode_options="--force-raw-format $multifile_format_encode"
+		extra_decode_options="--force-raw-format $multifile_format_decode"
+	else
+		if [ $input_type = "aiff" ] ; then
+			extra_decode_options="--force-aiff-format"
+		fi
+	fi
 
 	if [ $streamtype = ogg ] ; then
 		suffix=ogg
@@ -846,46 +901,52 @@
 		encode_options="$encode_options --sector-align"
 	fi
 
-	run_flac --force $encode_options file0.wav file1.wav file2.wav || die "ERROR"
+	run_flac --force $encode_options $extra_encode_options file0.$input_type file1.$input_type file2.$input_type || die "ERROR"
 	for n in 0 1 2 ; do
 		mv file$n.$suffix file${n}x.$suffix
 	done
-	run_flac --force --decode file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
+	run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
 	if [ $sector_align != sector_align ] ; then
 		for n in 0 1 2 ; do
-			cmp file$n.wav file${n}x.wav || die "ERROR: file mismatch on file #$n"
+			cmp file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
+		done
+	else
+		for n in 0 1 2 ; do
+			cmp file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
 		done
 	fi
 	for n in 0 1 2 ; do
-		rm -f file${n}x.$suffix file${n}x.wav
+		rm -f file${n}x.$suffix file${n}x.$input_type
 	done
 }
 
-echo "Testing multiple files without verify..."
-test_multifile flac no_sector_align ""
+for input_type in raw wav aiff ; do
+	echo "Testing multiple $input_type files without verify..."
+	test_multifile $input_type flac no_sector_align ""
 
-echo "Testing multiple files with verify..."
-test_multifile flac no_sector_align "--verify"
+	echo "Testing multiple $input_type files with verify..."
+	test_multifile $input_type flac no_sector_align "--verify"
 
-echo "Testing multiple files with --sector-align, without verify..."
-test_multifile flac sector_align ""
+	echo "Testing multiple $input_type files with --sector-align, without verify..."
+	test_multifile $input_type flac sector_align ""
 
-echo "Testing multiple files with --sector-align, with verify..."
-test_multifile flac sector_align "--verify"
+	echo "Testing multiple $input_type files with --sector-align, with verify..."
+	test_multifile $input_type flac sector_align "--verify"
 
-if [ $has_ogg = "yes" ] ; then
-	echo "Testing multiple files with --ogg, without verify..."
-	test_multifile ogg no_sector_align ""
+	if [ $has_ogg = "yes" ] ; then
+		echo "Testing multiple $input_type files with --ogg, without verify..."
+		test_multifile $input_type ogg no_sector_align ""
 
-	echo "Testing multiple files with --ogg, with verify..."
-	test_multifile ogg no_sector_align "--verify"
+		echo "Testing multiple $input_type files with --ogg, with verify..."
+		test_multifile $input_type ogg no_sector_align "--verify"
 
-	echo "Testing multiple files with --ogg and --sector-align, without verify..."
-	test_multifile ogg sector_align ""
+		echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
+		test_multifile $input_type ogg sector_align ""
 
-	echo "Testing multiple files with --ogg and --sector-align, with verify..."
-	test_multifile sector_align ogg "--verify"
+		echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
+		test_multifile $input_type ogg sector_align "--verify"
 
-	echo "Testing multiple files with --ogg and --serial-number, with verify..."
-	test_multifile ogg no_sector_align "--serial-number=321 --verify"
-fi
+		echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
+		test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
+	fi
+done