Files
mercury/tests/tabling/Mmakefile
Julien Fischer 0de031f9b5 Disable tabling tests in the hlc.par grades.
tests/tabling/Mmakefile:
     As above.

     Delete code that disabled the tabling tests in the now removed hl.*
     grades.
2021-06-17 23:26:14 +10:00

307 lines
7.1 KiB
Makefile

#-----------------------------------------------------------------------------#
# vim: ts=8 sw=8 noexpandtab ft=make
#-----------------------------------------------------------------------------#
TESTS_DIR = ..
THIS_DIR = tabling
MAYBE_J1 =
#-----------------------------------------------------------------------------#
SIMPLE_NONLOOP_PROGS = \
boyer \
expand \
expand_bitmap \
expand_float \
expand_poly \
expand_tuple \
expand_tuple2 \
fast_loose \
fib \
fib_float \
fib_int16 \
fib_int32 \
fib_int64 \
fib_int8 \
fib_list \
fib_stats \
fib_string \
fib_uint \
fib_uint16 \
fib_uint32 \
fib_uint64 \
fib_uint8 \
loopcheck_no_loop \
loopcheck_nondet_no_loop \
mercury_java_parser_dead_proc_elim_bug \
mercury_java_parser_dead_proc_elim_bug2 \
oota \
pack_args_memo \
reset_stats_intermod \
specified_hidden_arg \
table_foreign_enum \
table_foreign_output \
table_subtype_du \
table_subtype_enum \
test_enum \
test_packed \
unused_args
# Tabling of nondet predicates and deep profiling are (currently)
# incompatible.
ifeq "$(findstring profdeep,$(GRADE))" ""
BROKEN_FOR_PROFDEEP_NONLOOP_PROGS = \
memo_non
else
BROKEN_FOR_PROFDEEP_NONLOOP_PROGS =
endif
NONLOOP_SPECIFIED_PROGS0 = \
specified \
specified_stats
# The above test uses the '--allow-table-reset' option which is not
# implemented for the MLDS backend.
#
ifeq "$(findstring hl,$(GRADE))" ""
NONLOOP_SPECIFIED_PROGS1 = $(NONLOOP_SPECIFIED_PROGS0)
else
NONLOOP_SPECIFIED_PROGS1 =
endif
# The overhead caused by profiling causes this test to fail in some of the
# profiling grades, so we disable it in all of them.
#
ifeq "$(findstring prof,$(GRADE))" ""
NONLOOP_SPECIFIED_PROGS2 = $(NONLOOP_SPECIFIED_PROGS1)
else
NONLOOP_SPECIFIED_PROGS2 =
endif
# We also don't enable it in term-size profiling grades.
#
ifeq "$(findstring tsc,$(GRADE))" ""
NONLOOP_SPECIFIED_PROGS3 = $(NONLOOP_SPECIFIED_PROGS2)
else
NONLOOP_SPECIFIED_PROGS3 =
endif
ifeq "$(findstring tsw,$(GRADE))" ""
NONLOOP_SPECIFIED_PROGS = $(NONLOOP_SPECIFIED_PROGS3)
else
NONLOOP_SPECIFIED_PROGS =
endif
SIMPLE_LOOP_PROGS = \
loopcheck \
loopcheck_nondet \
tc_loop \
tc_memo \
tc_memo2
MAYBE_MINIMAL_NONLOOP_PROGS = \
combine \
completed_consumer_in_solutions \
consumer_in_commit \
consumer_in_solutions \
coup \
coup2 \
coup3 \
coup4 \
coup_det_frame \
coup_no_commit \
coup_non_tabled_frame \
generator_in_commit \
mday \
repeat \
rotate \
rotate2 \
seq \
seq2 \
seq3 \
seq4 \
sg \
tc_minimal \
tc_minimal2
# Minimal model tests don't yet work in own stack (mmos) grades.
# Since in most cases the symptom of failure is an infinite loop,
# we don't want to execute these tests in such grades.
ifneq "$(findstring mmos,$(GRADE))" ""
MINIMAL_NONLOOP_PROGS =
else
MINIMAL_NONLOOP_PROGS = $(MAYBE_MINIMAL_NONLOOP_PROGS)
endif
MINIMAL_LOOP_PROGS =
# The following programs do not work:
# semidet_minimal.m
# tc_minimal_semidet.m
ALL_SIMPLE_PROGS = \
$(SIMPLE_NONLOOP_PROGS) \
$(BROKEN_FOR_PROFDEEP_NONLOOP_PROGS) \
$(NONLOOP_SPECIFIED_PROGS) \
$(SIMPLE_LOOP_PROGS)
ALL_MINIMAL_PROGS = $(MINIMAL_NONLOOP_PROGS)
ifneq "$(findstring .gc,$(GRADE))" ""
# The substitution is there to avoid unwanted "mm" matches from "rbmm".
ifneq "$(findstring mm,$(subst rbmm,x,$(GRADE)))" ""
PROGS0 = $(ALL_SIMPLE_PROGS) $(ALL_MINIMAL_PROGS)
NONLOOP_PROGS = $(SIMPLE_NONLOOP_PROGS) \
$(MINIMAL_NONLOOP_PROGS)
else
PROGS0 = $(ALL_SIMPLE_PROGS)
NONLOOP_PROGS = $(SIMPLE_NONLOOP_PROGS)
endif
else
PROGS0 =
endif
# Tabling is disabled in all .par grades due to the lack of synchronization on
# table updates.
ifeq "$(findstring .par,$(GRADE))" ""
PROGS1 = $(PROGS0)
else
PROGS1 =
endif
# Disable these tests in MLDS grades (C, C# and Java)
# with high level data representation, because tabling is not implemented
# for high level data representation.
ifneq "$(findstring java,$(GRADE))$(findstring csharp,$(GRADE))" ""
# This is either the C# grade or the Java grade.
PROGS =
else
# This is a C grade.
PROGS = $(PROGS1)
endif
TESTS = $(sort $(PROGS))
include ../Mmake.common
# Module-specific options should go in Mercury.options so they
# can be found by `mmc --make'.
include Mercury.options
%.runtest: %.res ;
#-----------------------------------------------------------------------------#
# Some test cases are expected to abort.
# We also need to pipe the output for these test cases through sed to avoid
# hard-coding dependencies on particular line numbers in the standard library
# source code.
tc_loop.out: tc_loop
if ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
sed -e 's/exception.m:[0-9]*/exception.m:NNNN/g' \
-e 's/require.m:[0-9]*/require.m:NNNN/g' \
-e 's/std_util.m:[0-9]*/std_util.m:NNNN/g' \
< $@.tmp > $@; \
rm -f $@.tmp; \
fi
tc_memo.out: tc_memo
if ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
sed -e 's/exception.m:[0-9]*/exception.m:NNNN/g' \
-e 's/require.m:[0-9]*/require.m:NNNN/g' \
-e 's/std_util.m:[0-9]*/std_util.m:NNNN/g' \
< $@.tmp > $@; \
rm -f $@.tmp; \
fi
tc_memo2.out: tc_memo2
if ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
sed -e 's/exception.m:[0-9]*/exception.m:NNNN/g' \
-e 's/require.m:[0-9]*/require.m:NNNN/g' \
-e 's/std_util.m:[0-9]*/std_util.m:NNNN/g' \
< $@.tmp > $@; \
rm -f $@.tmp; \
fi
loopcheck.out: loopcheck
if test -s loopcheck.err; then \
cat loopcheck.err > loopcheck.out; \
exit 1; \
elif ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
sed -e 's/exception.m:[0-9]*/exception.m:NNNN/g' \
-e 's/require.m:[0-9]*/require.m:NNNN/g' \
< $@.tmp > $@; \
rm -f $@.tmp; \
fi
loopcheck_nondet.out: loopcheck_nondet
if test -s loopcheck_nondet.err; then \
cat loopcheck_nondet.err > loopcheck_nondet.out; \
exit 1; \
elif ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
sed -e 's/exception.m:[0-9]*/exception.m:NNNN/g' \
-e 's/require.m:[0-9]*/require.m:NNNN/g' \
< $@.tmp > $@; \
rm -f $@.tmp; \
fi
consumer_in_solutions.out: consumer_in_solutions
if ./$< > $@.tmp 2>&1; then \
grep . $@.tmp; \
exit 1; \
else \
mv $@.tmp $@ ; \
fi
specified_stats.out: specified_stats
if ./$< > $@.tmp 2>&1; then \
sed -e 's/(100.00\%)/(NNN\%)/' \
-e 's/ ([1-9][0-9]\.[0-9][0-9]\%)/(NNN\%)/' \
-e 's/ ([0-9]\.[0-9][0-9]\%)/(NNN\%)/' \
-e 's/[1-9],[0-9][0-9][0-9],[0-9][0-9][0-9]/ NNN/' \
-e 's/ [1-9][0-9][0-9],[0-9][0-9][0-9]/ NNN/' \
-e 's/ [1-9][0-9],[0-9][0-9][0-9]/ NNN/' \
-e 's/ [1-9],[0-9][0-9][0-9]/ NNN/' \
-e 's/ [1-9][0-9][0-9]/ NNN/' \
-e 's/ [1-9][0-9]/ NNN/' \
-e 's/ [0-9]/ NNN/' \
< $@.tmp > $@; \
rm -f $@.tmp; \
else \
grep . $@.tmp; \
exit 1; \
fi
.PHONY: echo_progs
echo_progs:
@echo $(PROGS)
.PHONY: echo_nonloop_progs
echo_nonloop_progs:
@echo $(NONLOOP_PROGS)
.PHONY: echo_minimal_nonloop_progs
echo_minimal_nonloop_progs:
@echo $(MINIMAL_NONLOOP_PROGS)
.PHONY: echo_simple_nonloop_progs
echo_simple_nonloop_progs:
@echo $(SIMPLE_NONLOOP_PROGS)
#-----------------------------------------------------------------------------#