#!/bin/sh
self=$0
self_basename=${self##*/}
EOL=$'\n'
set -e

show_help() {
    cat <<EOF
Usage: ${self_basename} <path_to_dir_containing_tests> 

This script decodes all .ivf files in the given directory, taking an md5sum of
each frame, and comparing the md5sums to known good values in the corresponding
.ivf.md5 file.

Options:
    --help                      Print this message 
    --codec=<name>              Codec to pass to example [vp8]
    --exec=<name>               Name of executable to run [./ivfdec]
    --show-fail                 Identifies which frames fail the test
EOF
    exit 1
}

die() {
    echo "${self_basename}: $@"
    exit 1
}

die_unknown(){
    echo "Unknown option \"$1\"."
    echo "See ${self_basename} --help for available options."
    exit 1
}

# Process command line
for opt in "$@"; do
    optval="${opt#*=}"
    case "$opt" in
    --help|-h) show_help
    ;;
    --codec=*) codec="--codec=$optval"
    ;;
    --exec=*) executable="$optval"
    ;;
    --show-fail) show_fails=true
    ;;
    --exit-early) exit_early=true
    ;;
    -*) die_unknown $opt
    ;;
    *) dir="$opt"
    esac
done
[ -n "$dir" ] || show_help
[ -d "$dir" ] || die "Not a directory: $dir"
ext=${codec##--codec=}
ext=${ext:-ivf}
result=0
for f in `ls "$dir"/*.${ext}`; do
    base_name=${f##*/}
    test_name=${base_name%%.*}
    ${executable:-./ivfdec} ${codec} --md5 -q -p ${test_name} $f > /tmp/$$.md5

    if diff -ub /tmp/$$.md5 $f.md5 > /tmp/$$.md5.diff; then
        echo $f - pass
    else
        result=1
        fail=`grep ^+ /tmp/$$.md5.diff | wc -l`
        (( fail = fail - 1 ))
        echo $f - FAILED $fail / `wc -l < $f.md5`
        if ${show_fails:-false}; then
            grep ^+ /tmp/$$.md5.diff | awk '{print $2}'
        fi
        if ${exit_early:-false}; then
            rm -f /tmp/$$.md5{,.diff}
            exit 1
        fi
    fi
    rm -f /tmp/$$.md5{,.diff}
done
exit $result
