check-local: test

mcs_topdir = ../../../../mcs
mono_build_root = ../../..
top_builddir = $(mono_build_root)
srcdir = .
TEST_PROG = ../../interpreter/mint
JITTEST_PROG = ../../mini/mono

TEST_PROG_RUN = MONO_PATH=$(mcs_topdir)/class/lib/default MONO_SHARED_DIR=$(mono_build_root)/runtime $(TEST_PROG)
JITTEST_PROG_RUN = MONO_PATH=$(mcs_topdir)/class/lib/default MONO_SHARED_DIR=$(mono_build_root)/runtime $(JITTEST_PROG)

RUNTIME_ARGS=--config tests-config --optimize=all

RUNTIME = MONO_PATH=$(mcs_topdir)/class/lib/default $(top_builddir)/runtime/mono-wrapper

CSC = $(RUNTIME) $(mcs_topdir)/class/lib/default/mcs.exe --unsafe -nowarn:0162
ILASM = $(RUNTIME) $(mcs_topdir)/ilasm/ilasm.exe

# notes on programs that fail:
# delegate-async-exception.cs returns 1 on mono, 0 on MS 1.1
# delegate-delegate-exception.cs returns 1 on mono, hangs on MS 1.1
# finalizer-exception.cs returns 42 on mono and MS 1.1: on MS prints stack trace
#
# changing to run in the main thread:
# delegate-async-exception.cs hangs
# delegate-delegate-exception.cs hangs
# finalizer-exception.cs same as above
# main-returns-abort-resetabort.exe crashes randomly
# main-returns.exe doesn't wait the threads

#	delegate-async-exception.cs	\
#	delegate-delegate-exception.cs	\

TEST_CS_SRC=			\
	appdomain.cs	\
	delegate-async-exit.cs	\
	delegate-delegate-exit.cs	\
	delegate.cs	\
	finalizer-abort.cs	\
	finalizer-exception.cs	\
	finalizer-exit.cs	\
	main-exit.cs	\
	main-returns-abort-resetabort.cs	\
	main-returns-background-abort-resetabort.cs	\
	main-returns-background-resetabort.cs	\
	main-returns-background.cs	\
	main-returns.cs	\
	subthread-exit.cs

DISABLED_TESTS=			\
	$(PLATFORM_DISABLED_TESTS)

TESTSI_CS=$(TEST_CS_SRC:.cs=.exe)

%.exe: %.cs 
	$(CSC) -out:$@ $<

test:	testjit

test_cs: $(TEST_PROG) $(TESTSI_CS)
	@failed=0; \
	passed=0; \
	export LD_LIBRARY_PATH="`pwd`/.libs:$${LD_LIBRARY_PATH}"; \
	for i in $(TESTSI_CS); do	\
		if $(srcdir)/../test-driver '$(TEST_PROG_RUN)' $$i '$(DISABLED_TESTS)' $(RUNTIME_ARGS); \
		then \
			passed=`expr $${passed} + 1`; \
		else \
			if [ $$? = 2 ]; then break; fi; \
			failed=`expr $${failed} + 1`; \
		fi \
	done; \
	echo; echo ".cs: $${passed} test(s) passed. $${failed} test(s) failed."; echo

testjit: $(TESTSI_CS)
	@failed=0; \
	passed=0; \
	failed_tests="";\
	for i in $(TESTSI_CS); do	\
		rm -f $${i}.so; \
		if $(srcdir)/../test-driver '$(JITTEST_PROG_RUN)' $$i '$(DISABLED_TESTS)' $(RUNTIME_ARGS); \
		then \
			passed=`expr $${passed} + 1`; \
		else \
			if [ $$? = 2 ]; then break; fi; \
			failed=`expr $${failed} + 1`; \
			failed_tests="$${failed_tests} $$i"; \
		fi \
	done; \
	echo "$${passed} test(s) passed. $${failed} test(s) failed."; \
	if [ $${failed} != 0 ]; then echo -e "\nFailed tests:\n"; \
	  for i in $${failed_tests}; do echo $${i}; done; exit 1; fi

testinterp: $(TESTSI_CS)
	@failed=0; \
	passed=0; \
	failed_tests="";\
	export LD_LIBRARY_PATH="`pwd`/.libs:$${LD_LIBRARY_PATH}"; \
	for i in $(TESTSI_CS); do \
		if $(srcdir)/../test-driver '$(TEST_PROG_RUN)' $$i "$(DISABLED_TESTS)" $(RUNTIME_ARGS); \
		then \
			passed=`expr $${passed} + 1`; \
		else \
			if [ $$? = 2 ]; then break; fi; \
			failed=`expr $${failed} + 1`; \
			failed_tests="$${failed_tests} $$i"; \
		fi \
	done; \
	echo "$${passed} test(s) passed. $${failed} test(s) failed."; \
	if [ $$failed != 0 ]; then echo -e "\nFailed tests:\n"; \
	  for i in $${failed_tests}; do echo $${i}; done; exit 1; fi

CLEANFILES = $(TESTSI_CS) $(TESTSI_IL) *.dll *.stdout *.exe stest.dat
