mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-22 21:03:53 +00:00
tests/tabling/Mmakefile:
As above.
Delete code that disabled the tabling tests in the now removed hl.*
grades.
307 lines
7.1 KiB
Makefile
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)
|
|
|
|
#-----------------------------------------------------------------------------#
|