#! /bin/sh
#
# Copyright (c) 1995 The Regents of the University of California.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#	This product includes software developed by the Network Research
#	Group at Lawrence Berkeley National Laboratory.
# 4. Neither the name of the University nor of the Laboratory may be used
#    to endorse or promote products derived from this software without
#    specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#) $Header: /cvsroot/nsnam/ns-2/tcl/test/test-all-template1,v 1.38 2007/06/11 00:51:15 tom_henderson Exp $
#
# The initial version of this script was written and contributed 
# by Matt Mathis (mathis@psc.edu).
#

file=$1; shift
directory=$1; shift

version=$1; shift
if test "$version" = "v2"; then
	tests=`awk '/^Class Test\//{ print substr($2,index($2, "/")+1) }' $file`
else
	tests=`awk '/^proc test_/{ print substr($2,index($2, "_")+1) }' $file`
fi

quiet=false
new=false
alltests=true
case $# in
quiet|QUIET) quiet=true;;
esac
# echo "num=$#, args $@"
while test $# -ge 1
do
	case $1 in
	quiet|QUIET) quiet=true;;
	new|NEW) new=true;;
	*) alltests=false; tlist="$tlist $1";;
	esac
	shift
done
test="$@"
datafile="temp.rands"
NS=${NS:-../../ns}

if $alltests
then
	:
else
	tests=$tlist
fi

if [ ! -d $directory ]; then
	if $new
	then
		mkdir $directory
	else
		echo "no saved test output.  do cvs update -d"
		echo "or re-run your test with \"new\" as the last argument."
		exit 1
	fi
fi

echo Tests: $tests
success="true"
number=0
for t in $tests; do

    # Beware that xgraph is run asynchronously, and if it
    # is slow to launch, you may get an incorrect graph
    sleep 1
    if $quiet
    then
	qflag="QUIET"
    else
	qflag=""
    fi
    echo Running test $t:
    echo $NS $file $t $qflag
    case $file in
    *-session.tcl | *-mixmode.tcl)
	$NS $file $t > temp.rands ;;
    *-mpls.tcl | *-webtraf.tcl | *-message.tcl)
	$NS $file $t $qflag > temp.rands ;;
    *)
	$NS $file $t $qflag ;;
    esac
    if test $? = 2 ; then 
	echo "Test not implemented"
	continue
    fi
    if [ -f $datafile ]; then
	if [ ! -f $directory/$t.gz ]; then
	    echo saving output for future validation
	    success="unknown"
	    cp $datafile $datafile.bk; gzip -f $datafile  
	    cp $datafile.bk $datafile
	    mv $datafile.gz $directory/$t.gz
	else
            # OLD: gzip -dc $directory/$t.gz | cmp -s - $datafile
            # Deleted because it is not supported in Mac OS X, for "cmp".
	    gzip -dc $directory/$t.gz > temp.randsgz
            cmp -s temp.randsgz $datafile
	    if [ $? = 0 ]; then
		echo Test output agrees with reference output
	    else
		echo Test output differs from reference output
		success="false"
		cp $datafile $directory/$t.test
		gzip -dc $directory/$t.gz > $directory/$t
		echo "Diagnose with: diff $directory/$t.test $directory/$t"
		echo "Or see URL \"http://www.isi.edu/nsnam/ns/ns-problems.html\"."
	    fi
	 fi
    else
	success="unknown"
    fi
    if $quiet
    then
	:
    else
        echo 'next?'
        read answer
    fi
done
# sucess can be true, false, or unknown
if test "$success" = true; then
	echo All test output agrees with reference output.
	exit 0
else
	echo Some test failed.
	exit 1
fi
