1 :- multifile generate/2.
2 :- multifile shrink/3.
3
4 :- use_module(library(random),[random_member/2]).
5
6 % all options of any given type can be used for generation
7
8 generate(prob_ast_any(Options),Value) :-
9 generate(ground_type,GroundType) ,
10 (member(noset,Options)
11 -> generate(ground_type(Options),Type)
12 ; random_member(Type,[integer(Options),string(Options),boolean(Options),
13 set([any|Options]),seq([any|Options]), % any set/seq or expression
14 set(set(GroundType)),seq(seq(GroundType))])) , % max depth is 2 by now
15 gen_type(Type,ast,NType) ,
16 generate(NType,Value).
17
18 % generate random type for an ast leave
19 generate(ground_type,Type) :-
20 random_member(Type,[integer([]),string([]),boolean([])]).
21 generate(ground_type(Options),Type) :-
22 random_member(Type,[integer(Options),string(Options),boolean(Options)]).