1 | :- multifile generate/2. | |
2 | :- multifile shrink/3. | |
3 | ||
4 | % any couple | |
5 | generate(prob_ast_couple,Couple) :- | |
6 | generate(prob_ast_couple([]), Couple). | |
7 | ||
8 | generate(prob_ast_couple(Options),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :- | |
9 | generate(prob_ast_any(Options),V1) , | |
10 | generate(prob_ast_any(Options),V2) , | |
11 | V1 = b(_,ValTypeA,_) , | |
12 | V2 = b(_,ValTypeB,_). | |
13 | ||
14 | % same type | |
15 | generate(prob_ast_couple(Type),b(couple(V1,V2),couple(ValType,ValType),[])) :- | |
16 | \+ is_list(Type), | |
17 | gen_type(Type,ast,NType) , | |
18 | generate(NType,V1) , | |
19 | generate(NType,V2) , | |
20 | V1 = b(_,ValType,_). | |
21 | % possibly two different types | |
22 | generate(prob_ast_couple(TypeA,TypeB),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :- | |
23 | gen_type(TypeA,ast,NTypeA) , | |
24 | gen_type(TypeB,ast,NTypeB) , | |
25 | generate(NTypeA,V1) , | |
26 | generate(NTypeB,V2) , | |
27 | V1 = b(_,ValTypeA,_) , | |
28 | V2 = b(_,ValTypeB,_). | |
29 | ||
30 | % one ground value instead of type | |
31 | generate(prob_ast_couple(V1,TypeB),b(couple(V1,V2),couple(ValType,ValTypeB),[])) :- | |
32 | V1 = b(_,ValType,_) , | |
33 | gen_type(TypeB,ast,NTypeB) , | |
34 | generate(NTypeB,V2) , | |
35 | V2 = b(_,ValTypeB,_). | |
36 | generate(prob_ast_couple(TypeA,V2),b(couple(V1,V2),couple(ValTypeA,ValType),[])) :- | |
37 | V2 = b(_,ValType,_) , | |
38 | gen_type(TypeA,ast,NTypeA) , | |
39 | generate(NTypeA,V1) , | |
40 | V1 = b(_,ValTypeA,_). | |
41 | ||
42 | % both values are ground | |
43 | generate(prob_ast_couple(V1,V2),b(couple(V1,V2),couple(ValTypeA,ValTypeB),[])) :- | |
44 | V1 = b(_,ValTypeA,_) , | |
45 | V2 = b(_,ValTypeB,_). |