1 :- multifile generate/2.
2 :- multifile shrink/3.
3
4 :- use_module(library(avl)).
5
6 % Options:
7 % size:X with X the amount of elements in the tree
8
9 % random avl tree
10 generate(avl_tree(Options),Value) :-
11 is_list(Options) ,
12 generate(avl_tree(any([]),Options),Value).
13
14 generate(avl_tree(Type),Value) :-
15 generate(avl_tree(Type,[]),Value).
16
17 % avl tree with given type and options
18 generate(avl_tree(Type,Options),AVL) :-
19 (member(size:Size,Options)
20 -> Size >= 0
21 ; random(1,50,Size)) ,
22 length(Value,Size),
23 maplist(generate(Type),Value),
24 findall(Key-true,member(Key,Value),Pairs),
25 list_to_avl(Pairs,AVL).
26
27 % check empty avl
28 shrink(Type,_,E) :-
29 Type =..[avl_tree|_] ,
30 empty_avl(E).
31 % remove some member
32 shrink(Type,Old,New) :-
33 Type =..[avl_tree|_] ,
34 avl_member(Key,Old),
35 avl_delete(Key,Old,_,New).