1/*****************************************************************************
    2 * This file is part of the Prolog Development Tool (PDT)
    3 * 
    4 * Author: Andreas Becker
    5 * WWW: http://sewiki.iai.uni-bonn.de/research/pdt/start
    6 * Mail: pdt@lists.iai.uni-bonn.de
    7 * Copyright (C): 2012, CS Dept. III, University of Bonn
    8 * 
    9 * All rights reserved. This program is  made available under the terms
   10 * of the Eclipse Public License v1.0 which accompanies this distribution,
   11 * and is available at http://www.eclipse.org/legal/epl-v10.html
   12 * 
   13 ****************************************************************************/
   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).