#!/bin/sh

runtest() {
   echo "===================================================="
   echo "> Trying to open '$1' with assimp"
   assimp info "$1" 2>&1 | sed -e '/^ *$/d'
   ret=$?
   if [ "x${ret}" = "x5" ]; then
      # assimp failed to open the file, but handled it gracefully
      ret=0
   fi
   if [ "x${ret}" != "x0" ]; then
      echo "> assimp info '$1' returned $ret"
      retval=1
   fi
   echo ""
}

maxmemory=0
memoryfile=""
while getopts "m:M:" o; do
    case "${o}" in
        m)
            maxmemory=$((OPTARG+0))
        ;;
        M)
            memoryfile=${OPTARG}
        ;;
    esac
done
shift $((OPTIND-1))

setMaxMemory() {
    maxmemory=$(${0%/*}/getAvailableMemory)
}

[ -r "${memoryfile}" ] || memoryfile=""
if [ -n "${memoryfile}" ]; then
    if [ ${maxmemory} -le 0 ]; then
        setMaxMemory 2>&1
    fi
else
    maxmemory=0
fi

getNeededMemory() {
    local f="$1"
    local size
    local name
    cat "${memoryfile}" \
        | egrep -v "^#" \
        | egrep "/${f}$" \
        | while read size name; do
        echo $size
    done
}

retval=0
for f in "$@"; do
    if [ $maxmemory -gt 0 ]; then
        m=$(getNeededMemory "${f##*/}")
        if [ -n "${m}" ]; then
            if [ "x${m}" = x0 ]; then
                echo "skipping ${f} due to unbound memory"
                continue
            fi
            if [ $m -ge $maxmemory ]; then
                echo "skipping ${f} due to memory constraints ($m > $maxmemory)"
                continue
            fi
        fi
    fi
    runtest "$f"
done
exit $retval
