include ../Makefile.conf

CSV_DATAFILE = ../a-or-d.csv
SP_DATAFILE = ../a-or-d.txt:0.5+
TRAINOUT = lr_train.computed
POUT = pout.txt
FOUT = fout.txt
ROUT = rout.txt
FOLDS = 10
TCORRECT = lr_train.correct
PCORRECT = lr_predict.correct

# Caller should specify pd=<dir> when running this makefile.  Otherwise
# we'll try to guess at the path.  The testing scripts will be the ultimate
# judges of whether our guess is correct.
ifeq (,$(pd))
  # Guess at program directory.
  pd = ../programs
endif

TRAIN = $(pd)/train
PREDICT = $(pd)/predict
KFOLD = $(pd)/kfold



# Testing rules.
.PHONY : test test.train test.predict
test: test.train.csv test.predict.csv test.train.spardat test.predict.spardat
	@echo "Success: all"

test.train.csv:
	./test_train.sh "$(pd)" "$(CSV_DATAFILE)" "$(TRAINOUT)" "$(TCORRECT)"
	@echo "Success: train csv"

test.predict.csv:
	./test_predict.sh "$(pd)" "$(CSV_DATAFILE)" "$(TRAINOUT)" "$(PCORRECT)"
	@echo "Success: predict csv"

test.train.spardat:
	./test_train.sh "$(pd)" "$(SP_DATAFILE)" "$(TRAINOUT)" "$(TCORRECT)"
	@echo "Success: train spardat"

test.predict.spardat:
	./test_predict.sh "$(pd)" "$(SP_DATAFILE)" "$(TRAINOUT)" "$(PCORRECT)"
	@echo "Success: predict spardat"

valgrind:
	$(MAKE) -C .. cleanall
	$(MAKE) -C .. t=debug
	@echo
	@echo "RUNNING VALGRIND ON TRAIN CSV"
	$(VALGRIND) \
		$(TRAIN) in $(CSV_DATAFILE) save $(TRAINOUT) \
			arghelp verbosity 0
	@echo
	@echo
	@echo "RUNNING VALGRIND ON PREDICT CSV"
	$(VALGRIND) \
		$(PREDICT) in $(CSV_DATAFILE) load $(TRAINOUT) \
			arghelp verbosity 0 pout $(POUT) rout $(ROUT)
	$(RM) $(TRAINOUT) $(POUT) $(ROUT)
	@echo
	@echo "RUNNING VALGRIND ON TRAIN SPARDAT"
	$(VALGRIND) \
		$(TRAIN) in $(SP_DATAFILE) save $(TRAINOUT) \
			arghelp verbosity 0
	@echo
	@echo
	@echo "RUNNING VALGRIND ON PREDICT SPARDAT"
	$(VALGRIND) \
		$(PREDICT) in $(SP_DATAFILE) load $(TRAINOUT) \
			arghelp verbosity 0 pout $(POUT) rout $(ROUT)
	$(RM) $(TRAINOUT) $(POUT) $(ROUT)
	@echo
	@echo
	@echo "RUNNING VALGRIND ON KFOLD CSV"
	$(VALGRIND) \
		$(KFOLD) in $(CSV_DATAFILE) folds $(FOLDS) arghelp verbosity 0\
			pout $(POUT) rout $(ROUT) fout $(FOUT)
	$(RM) $(TRAINOUT) $(POUT) $(ROUT) $(FOUT)
	@echo
	@echo
	@echo "RUNNING VALGRIND ON KFOLD SPARDAT"
	$(VALGRIND) \
		$(KFOLD) in $(SP_DATAFILE) folds $(FOLDS) arghelp verbosity 0 \
			pout $(POUT) rout $(ROUT) fout $(FOUT)
	$(RM) $(TRAINOUT) $(POUT) $(ROUT) $(FOUT)





# Clean.
.PHONY : clean
clean:
	$(RM) $(TRAINOUT) *~

