Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/tests/runtests

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#!/bin/bash
# Run haskell test suites.

if uname -a | grep -i CYGWIN >/dev/null
then filepath() { cygpath -w "$1" | tr '\\\\' '/'; }
else filepath() { echo "$1"; }
fi

PATH=../script:$PATH	export PATH
HERE="`pwd`"
BASEDIR="`dirname $HERE`"
HC=`filepath "$BASEDIR/script/nhc98"`
HMAKEOPTS="-98"
RTSOPTS="+RTS -H64M -RTS"

exists () {
    ext=$1
    fstfile=`echo *.$ext | cut -d' ' -f1`
    if [ -f $fstfile ]
    then echo $fstfile
    else echo /dev/null
    fi
}

mains=`find $HERE -name Main.hs -print`

run () {
  outok=0; outbad=0; errok=0; errbad=0;
  compok=0; compbad=0; hmakeok=0; hmakebad=0;
  for file in $mains
  do
    dir=`dirname $file`
    cd $dir
    echo $dir
    $BASEDIR/script/hmake -HC=$HC $HMAKEOPTS Main 2>hmake.err &&
      { compok=$(($compok+1))
        input=`exists stdin`
        output=`exists stdout`
        errors=`exists stderr`
        echo Running....
        ./Main $RTSOPTS <$input >tmp.out 2>tmp.err || true
        echo Comparing output....
        if diff $output tmp.out
        then outok=$(($outok+1))
        else outbad=$(($outbad+1))
             echo >&2 "Output differs: $dir"
        fi
        echo Comparing stderr....
        if diff $errors tmp.err
        then errok=$(($errok+1))
        else errbad=$(($errbad+1))
             echo >&2 "Error differs: $dir"
        fi
        echo ....................
      } || {
        compbad=$(($compbad+1))
        echo Comparing hmake errors....
        hmakeout=`exists hmakerr`
        if fgrep -q -f $hmakeout hmake.err
        then echo ".............Failed (ok)"
             hmakeok=$(($hmakeok+1))
        else diff $hmakeout hmake.err
             echo ".............Failed (bad)"
             echo >&2 "Unexpected build failure: $dir"
             hmakebad=$(($hmakebad+1))
        fi
      }
    cd $HERE
  done
  echo >&2 "$compok built ok      / $compbad builds failed"
  echo >&2 "                  / of which $hmakeok known / $hmakebad bad"
  echo >&2 "$outok outputs match / $outbad outputs differ"
  echo >&2 "$errok errors  match / $errbad errors  differ"
}

clean () {
  echo Cleaning....
  for file in $mains
  do
    dir=`dirname $file`
    echo $dir
    (cd $dir && rm -f Main *.o *.hi tmp.out tmp.err hmake.err)
  done
}

case $# in
  0) mode=run ;;
  1) mode=$1 ;;
  *) mode=$1
     shift
     mains=
     for i in $*
     do
       if [ ! -f $i/Main.hs ]
       then
         echo "`basename $0`: can't find $i/Main.hs, ignoring"
       else
         mains="$mains $i/Main.hs"
       fi
     done
esac

case $mode in
  "run")      run ;;
  "clean")    clean ;;
  "cleanrun") clean; run ;;
  *)          echo "Usage: `basename $0` [run|clean|cleanrun] [testdir...]"
              exit 1 ;;
esac

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].