#! /bin/sh
#
# Run some of the tests.  If any arguments are provided, pass them to the
# test programs.
#
# -mvhome is needed for the ANL SP, and is ignored by others
args=
device=
MPICH_VERSION=
STOPFILE=${MPITEST_STOPTEST:-"$HOME/.stopmpichtests"}
MAKE="make --no-print-directory"

#
# Set mpirun to the name/path of the mpirun program
#FindMPIRUN
#
#
test_mpi2=1
runtests=1
quiet=0
makeeach=0
have_fortran=0
writesummaryfile=no
MAKE="make --no-print-directory"
for arg in "$@" ; do
    case $arg in 
    -basedir=* )
	basedir=`echo $arg | sed 's/-basedir=//'`
	;; 
    -srcdir=* )
	srcdir=`echo $arg | sed 's/-srcdir=//'`
	;; 
	-fort=* )
	have_fortran=`echo $arg | sed 's/-fort=//'`
	;;
	-checkonly )
	runtests=0
	;;
        -margs=*)
	margs=`echo $arg | sed 's/-margs=//'`
	args="$args $margs"
	;;
	-summaryfile=*)
	writesummaryfile=yes
	summaryfile=`echo A$arg | sed 's/A-summaryfile=//'`
	;;
	-small)
	makeeach=1
	;;
	-quiet)
	shift
	quiet=1
	;;
	-help|-u)
	echo "runtests [-checkonly] [-margs='...']"
	echo "run tests in this directory.  If -checkonly set, just run"
	echo "the differences check (do NO rerun the test programs)."
	echo "If -margs is used, these options are passed to mpirun."
	echo "If -small is used, the examples are built, run, and deleted."
	exit 1
	;;
	*)
	if test -n "$arg" ; then
   	    echo "runtests: Unknown argument ($arg)"
	    exit 1
        fi
	;;
    esac
done

#
# Load basic procedures
. ${srcdir}/../runbase

# If the programs are not available, run make.
if [ ! -x attrerr -a $makeeach = 0 -a $runtests = 1 ] ; then
    $MAKE
fi
mpirun=" ${basedir}/bin/smpirun -platform ${srcdir}/../../../../examples/msg/small_platform_with_routers.xml -hostfile ${srcdir}/../../hostfile  --log=root.thres:critical"
testfiles=""
if [ $runtests = 1 ] ; then

#
# Run Fortran tests ONLY if Fortran available
#no fortran tests compile with smpi at this time
#if [ $have_fortran -eq "1" ] ; then 
#    #RunTest attrtest 2 "*** Testing attributes from Fortran ***"

#    if [ $test_mpi2 = 1 ] ; then
#       RunTest commnamesf 1 "*** Testing Communicator Names from Fortran ***"
#    fi
#fi
#uses attr, not implemented
#RunTest attrt 2 "*** Testing attributes ***"
#fails, uses MPI_Attr_get, et MPI_Attr_put
#RunTest attrerr 1 "*** Testing attributes (2) ***"

RunTest grouptest_mpich 4 "*** Testing Groups ***"

RunTest groupcreate 4 "*** Testing Group creation ***"

#uses MPI_Intercomm_create
#RunTest ictest 4 "*** Testing Intercommunicators ***"

RunTest icdup 3 "*** Testing dup of an intercommunicator ***"

#
# ictest2 relies on a inconsistency in the standard, to wit, that the
# leader in both groups can be the same process.  This seems to be
# essential in a dynamic setting, since the only process both groups can
# access may be the single parent process (other than using client/server
# intercommunicator creating routines, with the parent providing the common
# information).
#
#testfiles="$testfiles ictest2.out"
#rm -f ictest2.out
#MakeExe ictest2
#echo '*** Testing Intercommunicators (2) ***'
#echo '*** Testing Intercommunicators (2) ***' >> ictest2.out
#$mpirun $args -np 4 ictest2 $* >> ictest2.out 2>&1
#echo '*** Testing Intercommunicators (2) ***' >> ictest2.out
#CleanExe ictest2
#uses MPI_Comm_test_inter and MPI_Intercomm_create
#RunTest ictest3 4 "*** Testing Intercommunicators (3) ***"

#if [ $have_fortran -eq "1" ]  ; then
#    RunTest commnamesf 2 "*** Testing Communicator Names ***"
#fi
#else
    # Just run checks
#    testfiles=`echo *.out`
fi

echo '*** Checking for differences from expected output ***'
CheckAllOutput context.diff
exit 0
