
if [ -z "$IC_NUM" ] ; then
	declare -i IC_NUM=1
fi

run_test() {
## USAGE:
# run_test test_func

# if tests are being run with TET or the test runner
if [  ! -z "$USING_TET" -o ! -z "$USING_TEST_RUNNER" ]; then
	## The TET framework REQUIRES variables of the form $ic1 ... $icN
	## where each variable is a list of test functions. Here, there is only
	## one test function per $icN variable. Each $icN variable MUST be present 
	## in the $iclist
	export ic$IC_NUM="$1"
	export iclist="$iclist ic$IC_NUM"

	## The standalone test runner executes each function in $TEST_LIST
	export TEST_LIST="$TEST_LIST $1"

else # test is being run directly.
	test_setup
	
	## Subshell is necessary for containment
	( "$1" )
	test_cleanup
fi
IC_NUM=$(($IC_NUM+1))

}

repeat_test() {
## USAGE: 
# repeat_test test_func N var1 ... varN var1_value1 ... var1_valueM ... varN_valueM
# where N is the number of values to substiute and M is the number of 
# values each variable takes
# 
# EXAMPLE
# repeat_test copy_file 2 INPUT OUTPUT infile1 infile2 outfile1 outfile2
# 
# NOTE - all variables MUST have the same number of arguments

if [ "$#" -lt 4 ] ; then
	echo "TEST SYNTAX ERROR: repeat_test() requires at least 4 arguments!"
	exit 255
fi

FUNC="$1"
VARS="$2"
shift 2

## get list of variables
declare -i I=1
while [ "$I" -le "$VARS" ]; do
	eval "v$I=$1"
	shift 1

	eval "out=\$v$I"
	I=$(($I+1))
done

#echo "----"

## $LENGTH is the number of values each variable takes
declare -i LENGTH=$(( $# / $VARS ))
#echo "list size: $LENGTH"

## Main loop: create a test function for each set of values.
declare -i J=1
while [ "$J" -le "$LENGTH" ] ; do
	declare -i I=1
	## Begin test function string

	# it is only safe to use $IC_NUM since run_test is used later in this function.
	str="$FUNC-$J-$IC_NUM() {" 

	while [ "$I" -le "$VARS" ] ; do
		## Assign each value to appropriate variable
		eval "var=\$v$I"
		eval "value=\$$(( ($I-1)*$LENGTH+$J ))"
		#echo "$var: $value"
		str="$str
		$var=\"$value\""
	
		I=$(($I+1))
	done
	## Close the test function and load it
	str="$str
		$FUNC
	}"
	#echo "$str"
	eval "$str"
	run_test "$FUNC-$J-$IC_NUM"

	J=$(($J+1))
done

}

. "$XDG_TEST_DIR/include/tempfile.sh"

test_setup() {
	get_guid "xdgt"
	export XDG_TEST_ID="$GUID"
	get_tmpsubdir "$XDG_TEST_DIR/tmp"
	export XDG_TEST_TMPDIR="$TMPSUBDIR"
	cd "$XDG_TEST_TMPDIR"
	
	get_shortid "$XDG_TEST_DIR/tmp/shortid"
	export XDG_TEST_SHORTID="$SHORTID"
}

test_cleanup() {
	if [ -z "$XDG_TEST_DONT_CLEANUP" ] ; then
		cd "$XDG_TEST_DIR"
		# ALWAYS check what you pass to 'rm -rf'
		[ -d "$XDG_TEST_TMPDIR" ] && rm -rf "$XDG_TEST_TMPDIR"
	fi
}

