:- use_module(library(sweet)).
:- use_module(library(assoc)).
:- use_module(library(rbtrees)).

:- use_module(library(tap)).

% lists
list_check_start :-
    a in [a,l,l].

list_check_middle :-
    a in [c,a,t].

list_check_end :-
    a in [d,c,b,a].

list_check_duplicate :-
    e in [b,e,e,f].

list_iterate :-
    aggregate(count, X^(X in [1,2,3]), N),
    N == 3.

list_singleton :-
    X in [end],
    X == end.


% dicts
dict_check :-
    foo-bar in _{foo:bar, alpha:a, one:1}.

dict_get_value :-
    foo-Bar in _{foo:bar, alpha:a, one:1},
    Bar == bar.

dict_iterate :-
    setof(K=V,K-V in _{foo:bar,alpha:a},EqPairs),
    EqPairs = [alpha=a,foo=bar].


% assocs
assoc_check :-
    list_to_assoc([a-1,c-3,b-2], Assoc),
    c-3 in Assoc.

assoc_get_value :-
    list_to_assoc([a-1,c-3,b-2], Assoc),
    c-Three in Assoc,
    Three == 3.

assoc_iterate :-
    list_to_assoc([a-1,c-3,b-2], Assoc),
    setof(K=V,K-V in Assoc,EqPairs),
    EqPairs = [a=1,b=2,c=3].


% rbtrees
rbtree_check :-
    list_to_rbtree([a-1,c-3,b-2], Rb),
    c-3 in Rb.

rbtree_get_value :-
    list_to_rbtree([a-1,c-3,b-2], Rb),
    c-Three in Rb,
    Three == 3.

rbtree_iterate :-
    list_to_rbtree([a-1,c-3,b-2], Rb),
    setof(K=V,K-V in Rb,EqPairs),
    EqPairs = [a=1,b=2,c=3].
