14
15:- module(meta_inference_test, []). 16
17:- use_module(pdt_prolog_metainference). 18:- use_module(library(lists)). 19
20:- begin_tests(simple_meta). 21
22test(direct_meta_call) :-
23 infer_meta(meta_inference_examples:simple0(_), MetaSpec),
24 MetaSpec == simple0(0).
25
26test(nested_meta_call) :-
27 infer_meta(meta_inference_examples:simple1(_), MetaSpec),
28 MetaSpec == simple1(0).
29
30test(meta_call_in_disjunction) :-
31 infer_meta(meta_inference_examples:simple2(_,_), MetaSpec),
32 MetaSpec == simple2(0, *).
33
34:- end_tests(simple_meta). 35
36
37:- begin_tests(unification). 38
39test(variable) :-
40 infer_meta(meta_inference_examples:unify0(_), MetaSpec),
41 MetaSpec == unify0(0).
42
43test(term) :-
44 infer_meta(meta_inference_examples:unify1(_), MetaSpec),
45 MetaSpec == unify1(0).
46
47test(chain) :-
48 infer_meta(meta_inference_examples:unify2(_), MetaSpec),
49 MetaSpec == unify2(0).
50
51test(chain_other_order) :-
52 infer_meta(meta_inference_examples:unify3(_), MetaSpec),
53 MetaSpec == unify3(0).
54
55test(multiple_in_term) :-
56 infer_meta(meta_inference_examples:unify4(_,_), MetaSpec),
57 MetaSpec == unify4(0,0).
58
59test(chain_via_term) :-
60 infer_meta(meta_inference_examples:unify5(_), MetaSpec),
61 MetaSpec == unify5(0).
62
63test(after_meta_call_not_relevant) :-
64 infer_meta(meta_inference_examples:unify6(_,_), MetaSpec),
65 MetaSpec == unify6(0,*).
66
67:- end_tests(unification). 68
69
70:- begin_tests(term_construction). 71
72test(functor_3) :-
73 infer_meta(meta_inference_examples:construct_term0(_,_), MetaSpec),
74 MetaSpec == construct_term0(functor(0), arity(0)).
75
76test(univ_2) :-
77 infer_meta(meta_inference_examples:construct_term1(_), MetaSpec),
78 MetaSpec == construct_term1(univ_list(0)).
79
80test(univ_2_only_functor) :-
81 infer_meta(meta_inference_examples:construct_term2(_,_), MetaSpec),
82 MetaSpec == construct_term2(functor(0), *).
83
84:- end_tests(term_construction). 85
86
87:- begin_tests(functor_construction). 88
89test(atom_concat_3_add_prefix) :-
90 infer_meta(meta_inference_examples:construct_functor0(_), MetaSpec),
91 MetaSpec == construct_functor0(add_prefix(abc, 0)).
92
93test(atom_concat_3_add_suffix) :-
94 infer_meta(meta_inference_examples:construct_functor1(_), MetaSpec),
95 MetaSpec == construct_functor1(add_suffix(abc, 0)).
96
97test(atom_concat_3_prefix_and_suffix) :-
98 infer_meta(meta_inference_examples:construct_functor2(_,_), MetaSpec),
99 MetaSpec == construct_functor2(is_prefix(0), is_suffix(0)).
100
101test(atom_concat_3_add_suffix_construct_term_with_functor_3) :-
102 infer_meta(meta_inference_examples:construct_functor3(_), MetaSpec),
103 MetaSpec == construct_functor3(add_suffix(abc, has_arity(1, 0))).
104
105:- end_tests(functor_construction). 106
107
108:- begin_tests(non_meta). 109
110test(non_meta0) :-
111 \+ infer_meta(meta_inference_examples:non_meta0(_), _).
112
113test(non_meta1) :-
114 \+ infer_meta(meta_inference_examples:non_meta1(_), _).
115
116test(non_meta2) :-
117 \+ infer_meta(meta_inference_examples:non_meta2(_), _).
118
119test(non_meta3) :-
120 \+ infer_meta(meta_inference_examples:non_meta3(_), _).
121
122test(non_meta4) :-
123 \+ infer_meta(meta_inference_examples:non_meta4(_), _).
124
125test(non_meta5) :-
126 \+ infer_meta(meta_inference_examples:non_meta5(_), _).
127
128:- end_tests(non_meta).