2000-12-10 07:09:52 +03:00
#!/bin/sh
2001-06-08 04:13:21 +04:00
# FLAC - Free Lossless Audio Codec
2002-01-26 21:05:12 +03:00
# Copyright (C) 2001,2002 Josh Coalson
2001-06-08 04:13:21 +04:00
#
# This program is part of FLAC; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2002-11-21 11:58:52 +03:00
LD_LIBRARY_PATH = ../src/libFLAC/.libs:../obj/release/lib:../obj/debug/lib:$LD_LIBRARY_PATH
2000-12-10 07:09:52 +03:00
export LD_LIBRARY_PATH
2002-12-04 07:57:33 +03:00
PATH = ../src/flac:../src/test_streams:../obj/release/bin:../obj/debug/bin:$PATH
2000-12-10 07:09:52 +03:00
2002-06-15 09:12:31 +04:00
flac --help 1>/dev/null 2>/dev/null || ( echo "ERROR can't find flac executable" 1>& 2 && exit 1)
if [ $? != 0 ] ; then exit 1 ; fi
2002-06-14 10:36:16 +04:00
2002-12-04 07:57:33 +03:00
run_flac ( )
{
if [ " $FLAC__VALGRIND " = yes ] ; then
valgrind --leak-check= yes --show-reachable= yes --num-callers= 10 --logfile-fd= 4 flac $* 4>>valgrind.log
else
flac $*
fi
}
2001-03-01 02:43:29 +03:00
echo "Generating streams..."
2001-01-20 02:10:56 +03:00
if test_streams ; then : ; else
2000-12-10 07:09:52 +03:00
echo "ERROR during test_streams" 1>& 2
exit 1
fi
2002-08-07 21:07:37 +04:00
echo "Checking for --ogg support in flac..."
if flac --ogg wacky1.wav 1>/dev/null 2>& 1 ; then
has_ogg = yes;
echo "flac --ogg works"
else
has_ogg = no;
echo "flac --ogg doesn't work"
fi
#
# multi-file tests
#
echo "Generating multiple input files from noise..."
2002-12-04 07:57:33 +03:00
if run_flac --verify --silent --force-raw-format --endian= big --sign= signed --sample-rate= 44100 --bps= 16 --channels= 2 noise.raw ; then : ; else
2002-08-07 21:07:37 +04:00
echo "ERROR generating FLAC file" 1>& 2
exit 1
fi
2002-12-04 07:57:33 +03:00
if run_flac --decode --silent noise.flac ; then : ; else
2002-08-07 21:07:37 +04:00
echo "ERROR generating WAVE file" 1>& 2
exit 1
fi
rm -f noise.flac
2002-08-09 02:54:03 +04:00
mv noise.wav file0.wav
cp file0.wav file1.wav
cp file1.wav file2.wav
2002-08-07 21:07:37 +04:00
test_multifile ( )
{
streamtype = $1
2002-08-16 09:36:53 +04:00
sector_align = $2
encode_options = " $3 "
2002-08-07 21:07:37 +04:00
if [ $streamtype = ogg ] ; then
suffix = ogg
encode_options = " $encode_options --ogg "
else
suffix = flac
fi
2002-08-16 09:36:53 +04:00
if [ $sector_align = sector_align ] ; then
encode_options = " $encode_options --sector-align "
fi
2002-12-04 07:57:33 +03:00
if run_flac $encode_options file0.wav file1.wav file2.wav ; then : ; else
2002-08-07 21:07:37 +04:00
echo "ERROR" 1>& 2
exit 1
fi
for n in 0 1 2 ; do
2002-08-09 02:54:03 +04:00
mv file$n .$suffix file${ n } x.$suffix
2002-08-07 21:07:37 +04:00
done
2002-12-04 07:57:33 +03:00
if run_flac --decode file0x.$suffix file1x.$suffix file2x.$suffix ; then : ; else
2002-08-07 21:07:37 +04:00
echo "ERROR" 1>& 2
exit 1
fi
2002-08-16 09:36:53 +04:00
if [ $sector_align != sector_align ] ; then
for n in 0 1 2 ; do
if cmp file$n .wav file${ n } x.wav ; then : ; else
echo " ERROR: file mismatch on file # $n " 1>& 2
exit 1
fi
done
fi
2002-08-07 21:07:37 +04:00
for n in 0 1 2 ; do
2002-08-09 02:54:03 +04:00
rm -f file${ n } x.$suffix file${ n } x.wav
2002-08-07 21:07:37 +04:00
done
}
echo "Testing multiple files without verify..."
2002-08-16 09:36:53 +04:00
test_multifile flac no_sector_align ""
2002-08-07 21:07:37 +04:00
echo "Testing multiple files with verify..."
2002-08-16 09:36:53 +04:00
test_multifile flac no_sector_align "--verify"
2002-08-07 21:07:37 +04:00
2002-08-16 09:36:53 +04:00
echo "Testing multiple files with --sector-align, without verify..."
test_multifile flac sector_align ""
2002-08-07 21:07:37 +04:00
2002-08-16 09:36:53 +04:00
echo "Testing multiple files with --sector-align, with verify..."
test_multifile flac sector_align "--verify"
2002-08-07 21:07:37 +04:00
if [ $has_ogg = "yes" ] ; then
echo "Testing multiple files with --ogg, without verify..."
2002-08-16 09:36:53 +04:00
test_multifile ogg no_sector_align ""
2002-08-07 21:07:37 +04:00
echo "Testing multiple files with --ogg, with verify..."
2002-08-16 09:36:53 +04:00
test_multifile ogg no_sector_align "--verify"
2002-08-07 21:07:37 +04:00
2002-08-16 09:36:53 +04:00
echo "Testing multiple files with --ogg and --sector-align, without verify..."
test_multifile ogg sector_align ""
2002-08-07 21:07:37 +04:00
2002-08-16 09:36:53 +04:00
echo "Testing multiple files with --ogg and --sector-align, with verify..."
test_multifile sector_align ogg "--verify"
2002-09-04 11:56:02 +04:00
echo "Testing multiple files with --ogg and --serial-number, with verify..."
test_multifile ogg no_sector_align "--serial-number=321 --verify"
2002-08-07 21:07:37 +04:00
fi
#
# single-file tests
#
2000-12-10 07:09:52 +03:00
test_file ( )
{
name = $1
channels = $2
bps = $3
encode_options = " $4 "
2002-08-30 09:39:36 +04:00
echo -n " $name (--channels= $channels --bps= $bps $encode_options ): encode... "
2002-12-04 07:57:33 +03:00
cmd = " run_flac --verify --silent --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps= $bps --channels= $channels $encode_options $name .raw "
2001-02-09 01:00:05 +03:00
echo " ### ENCODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
2001-05-03 04:59:27 +04:00
if $cmd 2>>./streams.log ; then : ; else
2000-12-10 07:09:52 +03:00
echo " ERROR during encode of $name " 1>& 2
exit 1
fi
echo -n "decode..."
2002-12-04 07:57:33 +03:00
cmd = " run_flac --silent --endian=big --sign=signed --decode --force-raw-format --output-name= $name .cmp $name .flac "
2001-02-09 01:00:05 +03:00
echo " ### DECODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
2001-07-09 22:15:36 +04:00
if $cmd 2>>./streams.log ; then : ; else
2000-12-10 07:09:52 +03:00
echo " ERROR during decode of $name " 1>& 2
exit 1
fi
2001-02-09 01:00:05 +03:00
ls -1l $name .raw >> ./streams.log
ls -1l $name .flac >> ./streams.log
ls -1l $name .cmp >> ./streams.log
2000-12-10 07:09:52 +03:00
echo -n "compare..."
if cmp $name .raw $name .cmp ; then : ; else
echo " ERROR during compare of $name " 1>& 2
exit 1
fi
echo OK
}
2002-06-10 22:24:51 +04:00
test_file_piped ( )
{
name = $1
channels = $2
bps = $3
encode_options = " $4 "
2002-06-11 10:15:28 +04:00
if [ ` env | grep -ic '^comspec=' ` != 0 ] ; then
is_win = yes
else
is_win = no
fi
2002-06-10 22:24:51 +04:00
echo -n " $name : encode via pipes... "
2002-06-11 10:15:28 +04:00
if [ $is_win = yes ] ; then
2002-12-04 07:57:33 +03:00
cmd = " run_flac --verify --silent --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps= $bps --channels= $channels $encode_options --stdout $name .raw "
2002-06-11 10:15:28 +04:00
echo " ### ENCODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
if $cmd 1>$name .flac 2>>./streams.log ; then : ; else
echo " ERROR during encode of $name " 1>& 2
exit 1
fi
else
2002-12-04 07:57:33 +03:00
cmd = " run_flac --verify --silent --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps= $bps --channels= $channels $encode_options --stdout - "
2002-06-11 10:15:28 +04:00
echo " ### ENCODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
if cat $name .raw | $cmd 1>$name .flac 2>>./streams.log ; then : ; else
echo " ERROR during encode of $name " 1>& 2
exit 1
fi
2002-06-10 22:24:51 +04:00
fi
echo -n "decode via pipes..."
2002-06-11 10:15:28 +04:00
if [ $is_win = yes ] ; then
2002-12-04 07:57:33 +03:00
cmd = " run_flac --silent --endian=big --sign=signed --decode --force-raw-format --stdout $name .flac "
2002-06-11 10:15:28 +04:00
echo " ### DECODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
if $cmd 1>$name .cmp 2>>./streams.log ; then : ; else
echo " ERROR during decode of $name " 1>& 2
exit 1
fi
else
2002-12-04 07:57:33 +03:00
cmd = "run_flac --silent --endian=big --sign=signed --decode --force-raw-format --stdout -"
2002-06-11 10:15:28 +04:00
echo " ### DECODE $name ####################################################### " >> ./streams.log
echo " ### cmd= $cmd " >> ./streams.log
if cat $name .flac | $cmd 1>$name .cmp 2>>./streams.log ; then : ; else
echo " ERROR during decode of $name " 1>& 2
exit 1
fi
2002-06-10 22:24:51 +04:00
fi
ls -1l $name .raw >> ./streams.log
ls -1l $name .flac >> ./streams.log
ls -1l $name .cmp >> ./streams.log
echo -n "compare..."
if cmp $name .raw $name .cmp ; then : ; else
echo " ERROR during compare of $name " 1>& 2
exit 1
fi
echo OK
}
2002-08-30 09:39:36 +04:00
if [ " $FLAC__EXHAUSTIVE_TESTS " = yes ] ; then
max_lpc_order = 32
else
max_lpc_order = 16
fi
2002-06-10 22:24:51 +04:00
echo "Testing noise through pipes..."
test_file_piped noise 1 8 "-0"
2000-12-10 07:09:52 +03:00
echo "Testing small files..."
2002-08-30 09:39:36 +04:00
test_file test01 1 16 " -0 -l $max_lpc_order -m -e -p "
test_file test02 2 16 " -0 -l $max_lpc_order -m -e -p "
test_file test03 1 16 " -0 -l $max_lpc_order -m -e -p "
test_file test04 2 16 " -0 -l $max_lpc_order -m -e -p "
2000-12-10 07:09:52 +03:00
echo "Testing 8-bit full-scale deflection streams..."
for b in 01 02 03 04 05 06 07 ; do
2002-08-30 09:39:36 +04:00
test_file fsd8-$b 1 8 " -0 -l $max_lpc_order -m -e -p "
2000-12-10 07:09:52 +03:00
done
echo "Testing 16-bit full-scale deflection streams..."
for b in 01 02 03 04 05 06 07 ; do
2002-08-30 09:39:36 +04:00
test_file fsd16-$b 1 16 " -0 -l $max_lpc_order -m -e -p "
2000-12-10 07:09:52 +03:00
done
2001-03-01 02:43:29 +03:00
echo "Testing 24-bit full-scale deflection streams..."
for b in 01 02 03 04 05 06 07 ; do
2002-08-30 09:39:36 +04:00
test_file fsd24-$b 1 24 " -0 -l $max_lpc_order -m -e -p "
2001-02-09 01:00:05 +03:00
done
2001-03-01 02:43:29 +03:00
2001-03-28 03:58:23 +04:00
echo "Testing 16-bit wasted-bits-per-sample streams..."
for b in 01 ; do
2002-08-30 09:39:36 +04:00
test_file wbps16-$b 1 16 " -0 -l $max_lpc_order -m -e -p "
2001-03-28 03:58:23 +04:00
done
2002-08-22 11:26:06 +04:00
for bps in 8 16 24 ; do
2001-03-01 02:43:29 +03:00
echo " Testing $bps -bit sine wave streams... "
2002-08-22 11:26:06 +04:00
for b in 00 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 1 $bps " -0 -l $max_lpc_order -m -e --sample-rate=48000 "
2002-08-22 11:26:06 +04:00
done
for b in 01 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 1 $bps " -0 -l $max_lpc_order -m -e --sample-rate=96000 "
2002-08-22 11:26:06 +04:00
done
for b in 02 03 04 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 1 $bps " -0 -l $max_lpc_order -m -e "
2001-03-01 02:43:29 +03:00
done
2002-08-22 11:26:06 +04:00
for b in 10 11 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 2 $bps " -0 -l $max_lpc_order -m -e --sample-rate=48000 "
2002-08-22 11:26:06 +04:00
done
for b in 12 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 2 $bps " -0 -l $max_lpc_order -m -e --sample-rate=96000 "
2002-08-22 11:26:06 +04:00
done
for b in 13 14 15 16 17 18 19 ; do
2002-08-30 09:39:36 +04:00
test_file sine${ bps } -$b 2 $bps " -0 -l $max_lpc_order -m -e "
2001-03-01 02:43:29 +03:00
done
2000-12-10 07:09:52 +03:00
done
2002-10-11 10:22:30 +04:00
echo "Testing blocksize variations..."
for disable in '' '--disable-verbatim-subframes --disable-constant-subframes' '--disable-verbatim-subframes --disable-constant-subframes --disable-fixed-subframes' ; do
for blocksize in 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ; do
for lpc_order in 0 1 2 3 4 5 7 8 9 15 16 17 31 32 ; do
if [ $lpc_order = 0 ] || [ $lpc_order -le $blocksize ] ; then
test_file noise8m32 1 8 " -8 -p -e -l $lpc_order --lax --blocksize= $blocksize $disable "
fi
done
done
done
2000-12-10 07:09:52 +03:00
echo "Testing some frame header variations..."
2002-08-30 09:39:36 +04:00
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax -b $max_lpc_order "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax -b 65535 "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=9 "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=90 "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=90000 "
2002-09-11 04:31:47 +04:00
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=9 "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=90 "
test_file sine16-01 1 16 " -0 -l $max_lpc_order -m -e -p --lax --sample-rate=90000 "
2001-02-09 01:00:05 +03:00
echo "Testing option variations..."
for f in 00 01 02 03 04 ; do
2002-10-11 10:22:30 +04:00
for disable in '' '--disable-verbatim-subframes --disable-constant-subframes' '--disable-verbatim-subframes --disable-constant-subframes --disable-fixed-subframes' ; do
for opt in 0 1 2 4 5 6 8 ; do
for extras in '' '-p' '-e' ; do
test_file sine16-$f 1 16 " - $opt $extras $disable "
done
2001-02-09 01:00:05 +03:00
done
2002-10-11 10:22:30 +04:00
if [ " $FLAC__EXHAUSTIVE_TESTS " = yes ] ; then
test_file sine16-$f 1 16 " -b 16384 -m -r 8 -l $max_lpc_order -e -p $disable "
fi
2001-02-09 01:00:05 +03:00
done
done
2002-08-30 09:39:36 +04:00
2001-02-09 01:00:05 +03:00
for f in 10 11 12 13 14 15 16 17 18 19 ; do
2002-10-11 10:22:30 +04:00
for disable in '' '--disable-verbatim-subframes --disable-constant-subframes' '--disable-verbatim-subframes --disable-constant-subframes --disable-fixed-subframes' ; do
for opt in 0 1 2 4 5 6 8 ; do
for extras in '' '-p' '-e' ; do
test_file sine16-$f 2 16 " - $opt $extras $disable "
done
2001-02-09 01:00:05 +03:00
done
2002-10-11 10:22:30 +04:00
if [ " $FLAC__EXHAUSTIVE_TESTS " = yes ] ; then
test_file sine16-$f 2 16 " -b 16384 -m -r 8 -l $max_lpc_order -e -p $disable "
fi
2001-02-09 01:00:05 +03:00
done
done
echo "Testing noise..."
2002-10-11 10:22:30 +04:00
for disable in '' '--disable-verbatim-subframes --disable-constant-subframes' '--disable-verbatim-subframes --disable-constant-subframes --disable-fixed-subframes' ; do
for channels in 1 2 4 8 ; do
for bps in 8 16 24 ; do
for opt in 0 1 2 3 4 5 6 7 8 ; do
for extras in '' '-p' '-e' ; do
for blocksize in '' '--lax -b 32' '--lax -b 32768' '--lax -b 65535' ; do
test_file noise $channels $bps " - $opt $extras $blocksize $disable "
done
2001-02-09 01:00:05 +03:00
done
done
2002-10-11 10:22:30 +04:00
if [ " $FLAC__EXHAUSTIVE_TESTS " = yes ] ; then
test_file noise $channels $bps " -b 16384 -m -r 8 -l $max_lpc_order -e -p $disable "
fi
2001-02-09 01:00:05 +03:00
done
done
done