1 :- multifile generate/2.
2 :- multifile shrink/3.
3
4 :- use_module(library(random),[random_member/2]).
5
6 % Options:
7 % noset to generate no lists or trees
8
9 generate(any(Options),Value) :-
10 TypeList = [atom,boolean,float,integer,rational,number] ,
11 member(noset,Options) ,
12 delete(Options,noset,NOptions) , % no nested data structures
13 random_member(Temp,TypeList) ,
14 Type =.. [Temp,NOptions] ,
15 generate(Type,Value).
16 generate(any(Options),Value) :-
17 TypeList = [atom,boolean,float,integer,rational,number] ,
18 \+member(noset,Options) ,
19 random_member(TempType,[list,avl_tree,tree|TypeList]) ,
20 random_member(SubType,TypeList) , % random subtype for nested data structures
21 nested_type(TempType,Options,SubType,Type) ,
22 generate(Type,Value).
23
24 nested_type(TempType,Options,SubType,Type) :-
25 member(TempType,[list,avl_tree,tree]) ,
26 InnerType =.. [SubType,Options] ,
27 Type =.. [TempType,InnerType,Options].
28 nested_type(TempType,Options,_,Type) :-
29 \+member(TempType,[list,avl_tree,tree]) ,
30 Type =.. [TempType,Options].