contains([X|_], X).
contains([H|T], X) :-
    not(H = X),
    contains(T, X).    
    
testSchnitt :-
    schnitt([2,2,3,4], [2,4,4,5], Erg), % Reihenfolge egal
    length(Erg,2),
    contains(Erg, 2),
    contains(Erg, 4),
    not(contains(Erg,3)),
    not(contains(Erg,5)),
    schnitt([2,2,3,4], [2], [2]),
    schnitt([3], [2,4,3,4,8], [3]),
    schnitt([2,2,3,4], [], []),
    schnitt([], [2,4,3,4,8], []).
         
    
testKreuzprodukt :-
    kreuzprodukt([1,2], [3,4], Erg), % Reihenfolge egal
    length(Erg,4),
    contains(Erg, [1,3]),
    contains(Erg, [1,4]),
    contains(Erg, [2,3]),
    contains(Erg, [2,4]),
    not(contains(Erg, [1,1])),
    not(contains(Erg, [4,4])),
    kreuzprodukt([1], [2], [[1,2]]),
    kreuzprodukt([3,4], [], []),
    kreuzprodukt([], [3,4], []).
          

testListeTeilen :-
	listeTeilen([1,2,2,3], [1,2], [2,3]),
	listeTeilen([1,2,2,3,4], [1,2,2], [3,4]),
    not(listeTeilen([1,2,2,3,4], [1,2], [2,3,4])),
    listeTeilen([], [], []),
    listeTeilen([1], [1], []).
    

testSort1:-
    sort1([9,1,2,7,2,9,0,5], [0, 1,2,2,5,7,9,9]),
    sort1([], []),
    sort1([1], [1]),
    sort1([1,2,2,3,4,5], [1,2,2,3,4,5]),
    sort1([5,4,3,2,1], [1,2,3,4,5]),
    not(sort1([1,2,2,3], [1,2,3])),
    not(sort1([1,2,2,3], [1,2,3,3])).
 
 
sort2([X,Y], [Y,X]) :-
    X >= Y. 
  
testSort2:-
    sort2([9,1,2,7,2,9,0,5],[0, 1,2,2,5,7,9,9]),
    sort2([], []),
    sort2([1], [1]),
    sort2([1,2,2,3,4,5], [1,2,2,3,4,5]),
    sort2([5,4,3,2,1], [1,2,3,4,5]),
    not(sort2([1,2,2,3], [1,2,3])),
    not(sort2([1,2,2,3], [1,2,3,3])).  
       
testAll:-
    testSchnitt,
    testKreuzprodukt,
    testListeTeilen,
    testSort1,
    testSort2,
    !.
        
      