diff --git a/tests/valid/Mmake b/tests/valid/Mmake index 47f158ffe..925f8fae0 100644 --- a/tests/valid/Mmake +++ b/tests/valid/Mmake @@ -8,25 +8,42 @@ include ../Mmake #-----------------------------------------------------------------------------# -SOURCES= \ - assoc_list.nl \ - det_inference.nl \ - det_switch.nl \ - easy_nondet_test.nl \ - easy_nondet_test_2.nl \ - mode_merge_insts.nl \ - name_mangling.nl \ - same_length_2.nl \ - same_length_3.nl \ - indexing.nl \ - tiny.nl +SOURCES= \ + complicated_unify.m \ + dcg_test.m \ + det_condition.m \ + det_inference.m \ + det_switch.m \ + easy_nondet_test.m \ + easy_nondet_test_2.m \ + error.m \ + followcode_det_problem.m \ + higher_order.m \ + implied_mode.m \ + indexing.m \ + loop.m \ + name_mangling.m \ + semidet_disj.m \ + stack_alloc.m \ + switches.m \ + unreachable_code.m -OBJS= $(SOURCES:%.nl=%.o) -NOS = $(SOURCES:%.nl=%.no) -PROGS = $(SOURCES:%.nl=%) +# The mode system can't handle the following test cases yet: +# assoc_list.m +# determinism.m +# mode_merge_insts.m +# There is a bug which prevents us from passing this test case: +# same_length_2.m -depend: tiny.depend +OBJS= $(SOURCES:%.m=%.o) +NOS = $(SOURCES:%.m=%.no) +PROGS = $(SOURCES:%.m=%) -all: $(OBJS) tiny +all: objs +check: objs +objs: $(OBJS) +depend: +clean: + rm -f *.c *.o *.err2 *.d #-----------------------------------------------------------------------------# diff --git a/tests/valid/assoc_list.nl b/tests/valid/assoc_list.m similarity index 80% rename from tests/valid/assoc_list.nl rename to tests/valid/assoc_list.m index 8cbde3f61..d8731a554 100644 --- a/tests/valid/assoc_list.nl +++ b/tests/valid/assoc_list.m @@ -6,7 +6,7 @@ :- pred assoc_list_member(pair(K,V), list(pair(K,V))). :- mode assoc_list_member(bound(free - ground) -> ground, in) is semidet. -:- mode assoc_list_member(bound(free - free) -> ground, in) is det. +:- mode assoc_list_member(bound(free - free) -> ground, in) is nondet. assoc_list_member(X, [X|_]). assoc_list_member(X, [_|Xs]) :- diff --git a/tests/valid/complicated_unify.nl b/tests/valid/complicated_unify.m similarity index 100% rename from tests/valid/complicated_unify.nl rename to tests/valid/complicated_unify.m diff --git a/tests/valid/dcg_test.nl b/tests/valid/dcg_test.m similarity index 82% rename from tests/valid/dcg_test.nl rename to tests/valid/dcg_test.m index fc1135221..7d959f01a 100644 --- a/tests/valid/dcg_test.nl +++ b/tests/valid/dcg_test.m @@ -6,6 +6,12 @@ :- pred q is semidet. :- pred r is semidet. :- pred s is semidet. +:- external(q/2). +:- external(r/2). +:- external(s/2). +:- external(q/0). +:- external(r/0). +:- external(s/0). :- pred p(int::in, int::out) is nondet. diff --git a/tests/valid/det_condition.nl b/tests/valid/det_condition.m similarity index 100% rename from tests/valid/det_condition.nl rename to tests/valid/det_condition.m diff --git a/tests/valid/det_inference.nl b/tests/valid/det_inference.m similarity index 88% rename from tests/valid/det_inference.nl rename to tests/valid/det_inference.m index 6ba8250f3..ff8ea2abc 100644 --- a/tests/valid/det_inference.nl +++ b/tests/valid/det_inference.m @@ -1,6 +1,6 @@ :- module det_inference. -:- pred p1. +:- pred p1 is det. :- pred p2. :- pred p3. :- pred p4. diff --git a/tests/valid/det_switch.nl b/tests/valid/det_switch.m similarity index 88% rename from tests/valid/det_switch.nl rename to tests/valid/det_switch.m index 5e5661e3d..8d113334c 100644 --- a/tests/valid/det_switch.nl +++ b/tests/valid/det_switch.m @@ -5,7 +5,7 @@ :- pred p(enum, int) is det. :- mode p(in, out) is det. :- mode p(out, in) is semidet. -:- mode p(out, out) is nondet. +:- mode p(out, out) is multi. p(a, 1). p(b, 2). diff --git a/tests/valid/determinism.nl b/tests/valid/determinism.m similarity index 99% rename from tests/valid/determinism.nl rename to tests/valid/determinism.m index c45631d07..29c78098b 100644 --- a/tests/valid/determinism.nl +++ b/tests/valid/determinism.m @@ -37,7 +37,5 @@ p3 :- r(Y), X = Y. -/* :- external(q/1). :- external(r/1). -*/ diff --git a/tests/valid/easy_nondet_test.nl b/tests/valid/easy_nondet_test.m similarity index 90% rename from tests/valid/easy_nondet_test.nl rename to tests/valid/easy_nondet_test.m index 7403a5d06..9bcd1201e 100644 --- a/tests/valid/easy_nondet_test.nl +++ b/tests/valid/easy_nondet_test.m @@ -5,7 +5,7 @@ q(X) :- p(X). -:- pred p(int::out) is nondet. +:- pred p(int::out) is multi. p(X) :- X = 1 ; X = 2. diff --git a/tests/valid/easy_nondet_test_2.nl b/tests/valid/easy_nondet_test_2.m similarity index 82% rename from tests/valid/easy_nondet_test_2.nl rename to tests/valid/easy_nondet_test_2.m index de00e97ac..5ab4c83ba 100644 --- a/tests/valid/easy_nondet_test_2.nl +++ b/tests/valid/easy_nondet_test_2.m @@ -4,13 +4,13 @@ :- pred q(int::out) is nondet. -% q(1). -% q(2). +q(1). +q(2). :- pred r(int::out) is nondet. -% r(3). -% r(4). +r(3). +r(4). p(X) :- q(X) ; r(X). diff --git a/tests/valid/error.nl b/tests/valid/error.m similarity index 90% rename from tests/valid/error.nl rename to tests/valid/error.m index e1ac7a067..d8c2caf82 100644 --- a/tests/valid/error.nl +++ b/tests/valid/error.m @@ -2,6 +2,6 @@ :- import_module require. :- pred t(int::out) is det. -t(X) :- +t(_X) :- error(""). diff --git a/tests/valid/followcode_det_problem.nl b/tests/valid/followcode_det_problem.m similarity index 100% rename from tests/valid/followcode_det_problem.nl rename to tests/valid/followcode_det_problem.m index a572e38ac..eb2f5e2a1 100644 --- a/tests/valid/followcode_det_problem.nl +++ b/tests/valid/followcode_det_problem.m @@ -3,12 +3,12 @@ :- pred p(int::out) is semidet. p(X) :- + Z = 4, ( Z = 3 ; Z = 4 ), - Z = 4, q(X). :- pred q(int::out) is det. diff --git a/tests/valid/higher_order.nl b/tests/valid/higher_order.m similarity index 77% rename from tests/valid/higher_order.nl rename to tests/valid/higher_order.m index 874596845..975ec8f94 100644 --- a/tests/valid/higher_order.nl +++ b/tests/valid/higher_order.m @@ -1,11 +1,8 @@ :- module higher_order. :- import_module list, int. -:- pred call(pred(T1, T2), T1, T2). -:- mode call(in, in, out) is det. - :- pred map_list(pred(T1, T2), list(T1), list(T2)). -:- mode map_list(in, in, out) is det. +:- mode map_list(pred(in, out) is det, in, out) is det. map_list(_P, [], []). map_list(P, [X|Xs], [Y|Ys]) :- @@ -28,6 +25,6 @@ t. f :- fail. :- pred test(pred). -:- mode test(out) is nondet. +:- mode test(out((pred) is semidet)) is nondet. test(t). test(f). diff --git a/tests/valid/implied_mode.nl b/tests/valid/implied_mode.m similarity index 100% rename from tests/valid/implied_mode.nl rename to tests/valid/implied_mode.m diff --git a/tests/valid/indexing.nl b/tests/valid/indexing.m similarity index 100% rename from tests/valid/indexing.nl rename to tests/valid/indexing.m diff --git a/tests/valid/loop.m b/tests/valid/loop.m new file mode 100644 index 000000000..c5af986d1 --- /dev/null +++ b/tests/valid/loop.m @@ -0,0 +1,9 @@ +:- module loop. +:- interface. +:- import_module io. + +:- pred main(io__state::di, io__state::uo) is det. + +:- implementation. + +main --> main. diff --git a/tests/valid/mode_merge_insts.nl b/tests/valid/mode_merge_insts.m similarity index 62% rename from tests/valid/mode_merge_insts.nl rename to tests/valid/mode_merge_insts.m index 6a4b48dd0..a2191ce6c 100644 --- a/tests/valid/mode_merge_insts.nl +++ b/tests/valid/mode_merge_insts.m @@ -2,15 +2,17 @@ :- type triple ---> triple(int, int, int). -:- type list(T) ---> [] ; [T | list(T)]. - :- inst triple1 = bound(triple(ground, free, free)). :- inst triple2 = bound(triple(free, ground, free)). :- inst triple12 = bound(triple(ground, ground, free)). -:- pred p1(list(triple) :: free -> triple1) is det. -:- pred p2(list(triple) :: free -> triple2) is det. -:- pred q(list(triple) :: triple12 -> triple12) is det. +:- pred p1(triple :: free -> triple1) is det. +:- pred p2(triple :: free -> triple2) is det. +:- pred q(triple :: triple12 -> triple12) is det. + +:- external(p1/1). +:- external(p2/1). +:- external(q/1). :- pred p is det. diff --git a/tests/valid/name_mangling.nl b/tests/valid/name_mangling.m similarity index 100% rename from tests/valid/name_mangling.nl rename to tests/valid/name_mangling.m diff --git a/tests/valid/same_length_2.m b/tests/valid/same_length_2.m new file mode 100644 index 000000000..f85c50fbb --- /dev/null +++ b/tests/valid/same_length_2.m @@ -0,0 +1,28 @@ +:- module same_length_2. +:- import_module list. + +:- mode my_input_list_skel :: list_skel -> list_skel. +:- mode my_output_list_skel :: free -> list_skel. +:- mode my_list_skel_output :: list_skel -> ground. + +:- pred q(list(T)::my_input_list_skel). +:- pred r(list(T)::my_output_list_skel). + +:- external(q/1). +:- external(r/1). + +:- pred p. + +p :- + r(X), + q(X). + +:- pred p2(list(T)::my_output_list_skel). + +p2(X) :- + r(X), + q(X) + ; + r(X), + q(X). + diff --git a/tests/valid/same_length_2.nl b/tests/valid/same_length_2.nl deleted file mode 100644 index b49f6297e..000000000 --- a/tests/valid/same_length_2.nl +++ /dev/null @@ -1,28 +0,0 @@ -:- module same_length_2. - -:- type list(T) ---> [] ; [T | list(T)]. - -:- inst list_skel = bound([] ; [free | list_skel]). - -:- mode input_list_skel :: list_skel -> list_skel. -:- mode output_list_skel :: free -> list_skel. -:- mode list_skel_output :: list_skel -> ground. - -:- pred q(list(T)::input_list_skel). -:- pred r(list(T)::output_list_skel). - -:- pred p. - -p :- - r(X), - q(X). - -:- pred p2(list(T)::output_list_skel). - -p2(X) :- - r(X), - q(X) - ; - r(X), - q(X). - diff --git a/tests/valid/same_length_3.nl b/tests/valid/same_length_3.nl deleted file mode 100644 index a2d2811ba..000000000 --- a/tests/valid/same_length_3.nl +++ /dev/null @@ -1,28 +0,0 @@ -:- module same_length_3. - -:- type list(T) ---> [] ; [T | list(T)]. - -:- inst list_skel = bound([] ; [free | list_skel]). - -:- mode input_list_skel :: list_skel -> list_skel. -:- mode output_list_skel :: free -> list_skel. -:- mode list_skel_output :: list_skel -> ground. - -:- pred q(list(T)::input_list_skel) is det. -:- pred r(list(T)::output_list_skel) is det. - -:- pred p is det. - -p :- - r(X), - q(X). - -:- pred p2(list(T)::output_list_skel) is nondet. - -p2(X) :- - r(X), - q(X) - ; - r(X), - q(X). - diff --git a/tests/valid/semidet_disj.m b/tests/valid/semidet_disj.m new file mode 100644 index 000000000..bc5eb0335 --- /dev/null +++ b/tests/valid/semidet_disj.m @@ -0,0 +1,11 @@ +:- module semidet_disj. + +:- pred p(int::in) is semidet. +:- pred q(int::in) is semidet. +:- external(q/1). +:- pred r(int::in) is semidet. +:- external(r/1). + +p(X) :- + q(X) ; r(X). + diff --git a/tests/valid/stack_alloc.nl b/tests/valid/stack_alloc.m similarity index 84% rename from tests/valid/stack_alloc.nl rename to tests/valid/stack_alloc.m index b7277f531..f38b221af 100644 --- a/tests/valid/stack_alloc.nl +++ b/tests/valid/stack_alloc.m @@ -3,6 +3,9 @@ :- pred in(int::in) is semidet. :- pred out(int::out) is det. +:- external(in/1). +:- external(out/1). + :- pred p is semidet. p :- diff --git a/tests/valid/switches.nl b/tests/valid/switches.m similarity index 100% rename from tests/valid/switches.nl rename to tests/valid/switches.m diff --git a/tests/valid/tiny.nl b/tests/valid/tiny.nl deleted file mode 100644 index a28bbf1e2..000000000 --- a/tests/valid/tiny.nl +++ /dev/null @@ -1,8 +0,0 @@ -:- module tiny. -:- interface. -:- import_module io. - -:- pred main(io::di, io::uo) is det. - -main --> []. - diff --git a/tests/valid/unreachable_code.m b/tests/valid/unreachable_code.m new file mode 100644 index 000000000..fcffa28a8 --- /dev/null +++ b/tests/valid/unreachable_code.m @@ -0,0 +1,15 @@ +:- module unreachable_code. +:- interface. + +:- type foo ---> foo. + +:- pred p(foo::in, foo::in) is semidet. + +:- implementation. +:- import_module require. + +p(X, Y) :- + error("err"), + X = Y. + +%-----------------------------------------------------------------------------%