fate-run.sh 2.73 KB
Newer Older
Måns Rullgård's avatar
Måns Rullgård committed
1 2 3 4 5
#! /bin/sh

base=$(dirname $0)
. "${base}/md5.sh"

6 7
base64=tests/base64

Måns Rullgård's avatar
Måns Rullgård committed
8
test="${1#fate-}"
9
samples=$2
Måns Rullgård's avatar
Måns Rullgård committed
10
target_exec=$3
11
target_path=$4
Måns Rullgård's avatar
Måns Rullgård committed
12
command=$5
13 14 15
cmp=${6:-diff}
ref=${7:-"${base}/ref/fate/${test}"}
fuzz=$8
16

Måns Rullgård's avatar
Måns Rullgård committed
17 18
outdir="tests/data/fate"
outfile="${outdir}/${test}"
19
errfile="${outdir}/${test}.err"
20 21
cmpfile="${outdir}/${test}.diff"
repfile="${outdir}/${test}.rep"
Måns Rullgård's avatar
Måns Rullgård committed
22

23
do_tiny_psnr(){
24
    psnr=$(tests/tiny_psnr "$1" "$2" 2 0 0)
25
    val=$(expr "$psnr" : ".*$3: *\([0-9.]*\)")
26 27
    size1=$(expr "$psnr" : '.*bytes: *\([0-9]*\)')
    size2=$(expr "$psnr" : '.*bytes:[ 0-9]*/ *\([0-9]*\)')
28
    res=$(echo "if ($val $4 $5) 1" | bc)
29
    if [ "$res" != 1 ] || [ $size1 != $size2 ]; then
30 31 32 33 34
        echo "$psnr"
        return 1
    fi
}

35 36 37 38 39 40 41 42
oneoff(){
    do_tiny_psnr "$1" "$2" MAXDIFF '<=' ${fuzz:-1}
}

stddev(){
    do_tiny_psnr "$1" "$2" stddev  '<=' ${fuzz:-1}
}

43 44 45 46
run(){
    $target_exec $target_path/"$@"
}

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
ffmpeg(){
    $target_exec $target_path/ffmpeg "$@"
}

framecrc(){
    ffmpeg "$@" -f framecrc -
}

framemd5(){
    ffmpeg "$@" -f framemd5 -
}

crc(){
    ffmpeg "$@" -f crc -
}

md5(){
    ffmpeg "$@" md5:
}

pcm(){
    ffmpeg "$@" -vn -f s16le -
}

71 72 73
regtest(){
    t="${test#$2-}"
    ref=${base}/ref/$2/$t
74
    cleanfiles="$cleanfiles $outfile $errfile"
75
    outfile=tests/data/regression/$2/$t
76
    errfile=tests/data/$t.$2.err
77 78 79 80 81 82 83 84 85 86 87 88
    ${base}/${1}-regression.sh $t $2 $3 "$target_exec" "$target_path"
}

codectest(){
    regtest codec $1 tests/$1
}

lavftest(){
    regtest lavf lavf tests/vsynth1
}

lavfitest(){
89
    cleanfiles="tests/data/lavfi/${test#lavfi-}.nut"
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
    regtest lavfi lavfi tests/vsynth1
}

seektest(){
    t="${test#seek-}"
    ref=${base}/ref/seek/$t
    case $t in
        image_*) file="tests/data/images/${t#image_}/%02d.${t#image_}" ;;
        *)       file=$(echo $t | tr _ '?')
                 for d in acodec vsynth2 lavf; do
                     test -f tests/data/$d/$file && break
                 done
                 file=$(echo tests/data/$d/$file)
                 ;;
    esac
    $target_exec $target_path/tests/seek_test $target_path/$file
}
107

Måns Rullgård's avatar
Måns Rullgård committed
108 109
mkdir -p "$outdir"

110
$command > "$outfile" 2>$errfile
111
err=$?
112

113 114
if [ $err -gt 128 ]; then
    sig=$(kill -l $err 2>/dev/null)
115
    test "${sig}" = "${sig%[!A-Za-z]*}" || unset sig
116 117
fi

118 119 120 121 122 123 124 125 126 127
if test -e "$ref"; then
    case $cmp in
        diff)   diff -u -w "$ref" "$outfile"            >$cmpfile ;;
        oneoff) oneoff     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
        stddev) stddev     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
    esac
    cmperr=$?
    test $err = 0 && err=$cmperr
    test $err = 0 || cat $cmpfile
else
128
    echo "reference file '$ref' not found"
129
    err=1
130 131
fi

132
echo "${test}:${sig:-$err}:$($base64 <$cmpfile):$($base64 <$errfile)" >$repfile
133

134 135
test $err = 0 && rm -f $outfile $errfile $cmpfile $cleanfiles
exit $err