| 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,_). |