Home | History | Annotate | Download | only in tests
      1 #!/bin/sh
      2 
      3 # Copyright (c) 2011-2012 Jean-Marc Valin
      4 #
      5 #  This file is extracted from RFC6716. Please see that RFC for additional
      6 #  information.
      7 #
      8 #  Redistribution and use in source and binary forms, with or without
      9 #  modification, are permitted provided that the following conditions
     10 #  are met:
     11 #
     12 #  - Redistributions of source code must retain the above copyright
     13 #  notice, this list of conditions and the following disclaimer.
     14 #
     15 #  - Redistributions in binary form must reproduce the above copyright
     16 #  notice, this list of conditions and the following disclaimer in the
     17 #  documentation and/or other materials provided with the distribution.
     18 #
     19 #  - Neither the name of Internet Society, IETF or IETF Trust, nor the
     20 #  names of specific contributors, may be used to endorse or promote
     21 #  products derived from this software without specific prior written
     22 #  permission.
     23 #
     24 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     25 #  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     26 #  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     27 #  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
     28 #  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     29 #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     30 #  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     31 #  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     32 #  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     33 #  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     34 #  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     35 
     36 rm -f logs_mono.txt logs_mono2.txt
     37 rm -f logs_stereo.txt logs_stereo2.txt
     38 
     39 if [ "$#" -ne "3" ]; then
     40     echo "usage: run_vectors.sh <exec path> <vector path> <rate>"
     41     exit 1
     42 fi
     43 
     44 CMD_PATH=$1
     45 VECTOR_PATH=$2
     46 RATE=$3
     47 
     48 : ${OPUS_DEMO:=$CMD_PATH/opus_demo}
     49 : ${OPUS_COMPARE:=$CMD_PATH/opus_compare}
     50 
     51 if [ -d "$VECTOR_PATH" ]; then
     52     echo "Test vectors found in $VECTOR_PATH"
     53 else
     54     echo "No test vectors found"
     55     #Don't make the test fail here because the test vectors
     56     #will be distributed separately
     57     exit 0
     58 fi
     59 
     60 if [ ! -x "$OPUS_COMPARE" ]; then
     61     echo "ERROR: Compare program not found: $OPUS_COMPARE"
     62     exit 1
     63 fi
     64 
     65 if [ -x "$OPUS_DEMO" ]; then
     66     echo "Decoding with $OPUS_DEMO"
     67 else
     68     echo "ERROR: Decoder not found: $OPUS_DEMO"
     69     exit 1
     70 fi
     71 
     72 echo "=============="
     73 echo "Testing mono"
     74 echo "=============="
     75 echo
     76 
     77 for file in 01 02 03 04 05 06 07 08 09 10 11 12
     78 do
     79     if [ -e "$VECTOR_PATH/testvector$file.bit" ]; then
     80         echo "Testing testvector$file"
     81     else
     82         echo "Bitstream file not found: testvector$file.bit"
     83     fi
     84     if "$OPUS_DEMO" -d "$RATE" 1 "$VECTOR_PATH/testvector$file.bit" tmp.out >> logs_mono.txt 2>&1; then
     85         echo "successfully decoded"
     86     else
     87         echo "ERROR: decoding failed"
     88         exit 1
     89     fi
     90     "$OPUS_COMPARE" -r "$RATE" "$VECTOR_PATH/testvector${file}.dec" tmp.out >> logs_mono.txt 2>&1
     91     float_ret=$?
     92     "$OPUS_COMPARE" -r "$RATE" "$VECTOR_PATH/testvector${file}m.dec" tmp.out >> logs_mono2.txt 2>&1
     93     float_ret2=$?
     94     if [ "$float_ret" -eq "0" ] || [ "$float_ret2" -eq "0" ]; then
     95         echo "output matches reference"
     96     else
     97         echo "ERROR: output does not match reference"
     98         exit 1
     99     fi
    100     echo
    101 done
    102 
    103 echo "=============="
    104 echo Testing stereo
    105 echo "=============="
    106 echo
    107 
    108 for file in 01 02 03 04 05 06 07 08 09 10 11 12
    109 do
    110     if [ -e "$VECTOR_PATH/testvector$file.bit" ]; then
    111         echo "Testing testvector$file"
    112     else
    113         echo "Bitstream file not found: testvector$file"
    114     fi
    115     if "$OPUS_DEMO" -d "$RATE" 2 "$VECTOR_PATH/testvector$file.bit" tmp.out >> logs_stereo.txt 2>&1; then
    116         echo "successfully decoded"
    117     else
    118         echo "ERROR: decoding failed"
    119         exit 1
    120     fi
    121     "$OPUS_COMPARE" -s -r "$RATE" "$VECTOR_PATH/testvector${file}.dec" tmp.out >> logs_stereo.txt 2>&1
    122     float_ret=$?
    123     "$OPUS_COMPARE" -s -r "$RATE" "$VECTOR_PATH/testvector${file}m.dec" tmp.out >> logs_stereo2.txt 2>&1
    124     float_ret2=$?
    125     if [ "$float_ret" -eq "0" ] || [ "$float_ret2" -eq "0" ]; then
    126         echo "output matches reference"
    127     else
    128         echo "ERROR: output does not match reference"
    129         exit 1
    130     fi
    131     echo
    132 done
    133 
    134 
    135 
    136 echo "All tests have passed successfully"
    137 mono1=`grep quality logs_mono.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'`
    138 mono2=`grep quality logs_mono2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'`
    139 echo $mono1 $mono2 | awk '{if ($2 > $1) $1 = $2; print "Average mono quality is", $1, "%"}'
    140 
    141 stereo1=`grep quality logs_stereo.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'`
    142 stereo2=`grep quality logs_stereo2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'`
    143 echo $stereo1 $stereo2 | awk '{if ($2 > $1) $1 = $2; print "Average stereo quality is", $1, "%"}'
    144