Add a regresion test for compression levels.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 14 Oct 2012 10:40:40 +0000 (21:40 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 14 Oct 2012 10:40:40 +0000 (21:40 +1100)
src/test_streams/main.c
test/Makefile.am
test/test_compression.sh [new file with mode: 0755]

index fe1173c..28a1468 100644 (file)
@@ -869,6 +869,51 @@ foo:
        return false;
 }
 
+static FLAC__bool generate_noisy_sine(void)
+{
+       FILE *f;
+       FLAC__byte wav[] = {
+               'R', 'I', 'F', 'F',  76,   0,   0,   0,
+               'W', 'A', 'V', 'E', 'f', 'm', 't', ' ',
+                16,   0,   0,   0,   1,   0,   1,   0,
+               0x44,0xAC,  0,   0,0x88,0x58,0x01,   0,
+                 2,   0,  16,   0, 'd', 'a', 't', 'a',
+               0xa8,   0xba,   0x6,   0
+       };
+       int32_t randstate = 0x1243456;
+       double sample, last_val = 0.0;
+       int k;
+
+       if(0 == (f = fopen("noisy-sine.wav", "wb")))
+               return false;
+       if(fwrite(wav, 1, sizeof (wav), f) < sizeof (wav))
+               goto foo;
+
+       for (k = 0 ; k < 5 * 44100 ; k++) {
+               /* Obvioulsy not a crypto quality RNG. */
+               randstate = 11117 * randstate + 211231;
+               randstate = 11117 * randstate + 211231;
+               randstate = 11117 * randstate + 211231;
+
+               sample = randstate / (0x7fffffff * 1.000001);
+               sample = 0.2 * sample - 0.9 * last_val;
+
+               last_val = sample;
+
+               sample += sin (2.0 * k * M_PI * 1.0 / 32.0);
+               sample *= 0.4;
+
+               write_little_endian_int16(f, lrintf(sample * 32700.0));
+       };
+
+       fclose(f);
+
+       return true;
+foo:
+       fclose(f);
+       return false;
+}
+
 static FLAC__bool generate_wackywav64s(void)
 {
        FILE *f;
@@ -1078,6 +1123,7 @@ int main(int argc, char *argv[])
        if(!generate_wackywavs()) return 1;
        if(!generate_wackywav64s()) return 1;
        if(!generate_wackyrf64s()) return 1;
+       if(!generate_noisy_sine()) return 1;
        for(channels = 1; channels <= 8; channels *= 2) {
                unsigned bits_per_sample;
                for(bits_per_sample = 8; bits_per_sample <= 24; bits_per_sample += 4) {
index d423c0b..9bc3b1e 100644 (file)
@@ -26,7 +26,8 @@ check_SCRIPTS = \
        test_flac.sh \
        test_metaflac.sh \
        test_seeking.sh \
-       test_streams.sh
+       test_streams.sh \
+       test_compression.sh
 
 # This one should pass when building out-of-tree (eg 'make distcheck').
 check: $(check_SCRIPTS)
@@ -36,6 +37,7 @@ if FLaC__WITH_CPPLIBS
 endif
        $(srcdir)/test_seeking.sh
        $(srcdir)/test_streams.sh
+       $(srcdir)/test_compression.sh
        @echo "----------------"
        @echo "All tests passed"
        @echo "----------------"
@@ -53,6 +55,7 @@ endif
        ./test_metaflac.sh
        ./test_seeking.sh
        ./test_streams.sh
+       ./test_compression.sh
        @echo "----------------"
        @echo "All tests passed"
        @echo "----------------"
diff --git a/test/test_compression.sh b/test/test_compression.sh
new file mode 100755 (executable)
index 0000000..6507a44
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+#  FLAC - Free Lossless Audio Codec
+#  Copyright (C) 2012  Xiph.Org Foundation
+#
+#  This file is part the FLAC project.  FLAC is comprised of several
+#  components distributed under difference licenses.  The codec libraries
+#  are distributed under Xiph.Org's BSD-like license (see the file
+#  COPYING.Xiph in this distribution).  All other programs, libraries, and
+#  plugins are distributed under the GPL (see COPYING.GPL).  The documentation
+#  is distributed under the Gnu FDL (see COPYING.FDL).  Each file in the
+#  FLAC distribution contains at the top the terms under which it may be
+#  distributed.
+#
+#  Since this particular file is relevant to all components of FLAC,
+#  it may be distributed under the Xiph.Org license, which is the least
+#  restrictive of those mentioned above.  See the file COPYING.Xiph in this
+#  distribution.
+
+LD_LIBRARY_PATH=`pwd`/../src/libFLAC/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../src/share/grabbag/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../src/share/getopt/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_analysis/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_synthesis/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../src/share/utf8/.libs:$LD_LIBRARY_PATH
+LD_LIBRARY_PATH=`pwd`/../obj/$BUILD/lib:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH
+PATH=`pwd`/../src/flac:$PATH
+
+echo "Using FLAC binary :" `which flac`
+
+date=`date "+%Y%m%dT%H%M%S"`
+fname="comp${date}.flac"
+
+last_size=0
+last_k=0
+for k in `seq 1 8` ; do
+       flac -${k} --silent noisy-sine.wav -o ${fname}
+       size=`stat --format="%s" ${fname}`
+       echo "Compression level ${k}, file size ${size} bytes."
+       if test $k -gt 1 ; then
+               if test $last_size -lt $size ; then
+                       echo "Error : Compression $last_k size $last_size >= compression $k size $size."
+                       exit 1
+                       fi
+               fi
+       last_size=$size
+       last_k=$k
+       rm -f $fname
+       done