/* This test reveals a problem with propagation-based implementation 
   of the least-fixed point algorithm.  

test(	'test_progs/problem.pl','Graph Connectivity',
	monogrd,
	[X,Y],
	connected(X,Y) ).     
*/


test(	'test_progs/connect.pl','Graph Connectivity',
	monogrd,
	[],
	connected(X,Y) ).     
test(	'test_progs/connect.pl','Graph Connectivity',
	monogrd,
	[X],
	connected(X,Y) ).     
test(	'test_progs/connect.pl','Graph Connectivity',
	monogrd,
	[Y],
	connected(X,Y) ).     
test(	'test_progs/connect.pl','Graph Connectivity',
	monogrd,
	[X,Y],
	connected(X,Y) ).     


test(	'test_progs/merge.pl','merge',
	monogrd,
	[],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Xs],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Ys],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Zs],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Xs,Ys],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Xs,Zs],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Ys,Zs],
        merge(Xs,Ys,Zs) ).
test(	'test_progs/merge.pl','merge',
	monogrd,
	[Xs,Ys,Zs],
        merge(Xs,Ys,Zs) ).


test(	'test_progs/bugNrev.pl','Buggy Naive Reverse',
	monogrd,
	[],
	nrev(X,Y) ).
test(	'test_progs/bugNrev.pl','Buggy Naive Reverse',
	monogrd,
	[X],
	nrev(X,Y) ).
test(	'test_progs/bugNrev.pl','Buggy Naive Reverse',
	monogrd,
	[Y],
	nrev(X,Y) ).
test(	'test_progs/bugNrev.pl','Buggy Naive Reverse',
	monogrd,
	[X,Y],
	nrev(X,Y) ).
	 
test(	'test_progs/buggyqs.pl','Buggy Quick Sort', 
	monogrd,
	[],
        qs(Li,Lo) ).
test(	'test_progs/buggyqs.pl','Buggy Quick Sort', 
	monogrd,
	[Li],
        qs(Li,Lo) ).
test(	'test_progs/buggyqs.pl','Buggy Quick Sort', 
	monogrd,
	[Lo],
        qs(Li,Lo) ).
test(	'test_progs/buggyqs.pl','Buggy Quick Sort', 
	monogrd,
	[Li,Lo],
        qs(Li,Lo) ).

test(	'test_progs/iqs.pl','Improved Quick Sort',
	monogrd,
	[],
        iqsort(Xs,Ys) ).     
test(	'test_progs/iqs.pl','Improved Quick Sort',
	monogrd,
	[Xs],
        iqsort(Xs,Ys) ).     
test(	'test_progs/iqs.pl','Improved Quick Sort',
	monogrd,
	[Ys],
        iqsort(Xs,Ys) ).     
test(	'test_progs/iqs.pl','Improved Quick Sort',
	monogrd,
	[Xs,Ys],
        iqsort(Xs,Ys) ).     

test(	'test_progs/treesort.pl','Tree Sort',
	monogrd,
	[],
        treesort(Xs,Ys) ).
test(	'test_progs/treesort.pl','Tree Sort',
	monogrd,
	[Xs],
        treesort(Xs,Ys) ).
test(	'test_progs/treesort.pl','Tree Sort',
	monogrd,
	[Ys],
        treesort(Xs,Ys) ).
test(	'test_progs/treesort.pl','Tree Sort',
	monogrd,
	[Xs,Ys],
        treesort(Xs,Ys) ).

test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[X],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[Y],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[Z],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[X,Y],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[X,Z],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[Y,Z],
	diff(X,Y,Z) ).
test(	'test_progs/lstDiff.pl','List Difference',
	monogrd,
	[X,Y,Z],
	diff(X,Y,Z) ).

test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[X],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[Y],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[Z],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[X,Y],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[X,Z],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[Y,Z],
	insert(X,Y,Z) ).
test(	'test_progs/insert.pl','List Insertion',
	monogrd,
	[X,Y,Z],
	insert(X,Y,Z) ).

test(	'test_progs/icSort.pl','Interchange Sort',
	monogrd,
	[],
	sort(Xs,Ys) ).     
test(	'test_progs/icSort.pl','Interchange Sort',
	monogrd,
	[Xs],
	sort(Xs,Ys) ).     
test(	'test_progs/icSort.pl','Interchange Sort',
	monogrd,
	[Ys],
	sort(Xs,Ys) ).     
test(	'test_progs/icSort.pl','Interchange Sort',
	monogrd,
	[Xs,Ys],
	sort(Xs,Ys) ).     

test(	'test_progs/qsDList.pl','Quick Sort with Difference List',
	monogrd,
	[],
	quicksort(Xs,Ys) ).
test(	'test_progs/qsDList.pl','Quick Sort with Difference List',
	monogrd,
	[Xs],
	quicksort(Xs,Ys) ).
test(	'test_progs/qsDList.pl','Quick Sort with Difference List',
	monogrd,
	[Ys],
	quicksort(Xs,Ys) ).
test(	'test_progs/qsDList.pl','Quick Sort with Difference List',
	monogrd,
	[Xs,Ys],
	quicksort(Xs,Ys) ).

test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[K],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[D],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[V],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[K,D],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[K,V],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[D,V],
	 lookup(K,D,V) ).     
test(	'test_progs/lookup.pl','Dictionary Lookup in Binary Trees',
	monogrd, 
	[K,D,V],
	 lookup(K,D,V) ).     

test(	'test_progs/permSort.pl','Permutation Sort',
	monogrd,
        [],
	sort(Xs,Ys) ).
test(	'test_progs/permSort.pl','Permutation Sort',
	monogrd,
        [Xs],
	sort(Xs,Ys) ).
test(	'test_progs/permSort.pl','Permutation Sort',
	monogrd,
        [Ys],
	sort(Xs,Ys) ).
test(	'test_progs/permSort.pl','Permutation Sort',
	monogrd,
        [Xs,Ys],
	sort(Xs,Ys) ).
		
test(	'test_progs/heapify.pl','Heapify Binary Trees',
	monogrd,
        [],
	heapify(Tree,Heap) ).     
test(	'test_progs/heapify.pl','Heapify Binary Trees',
	monogrd,
        [Tree],
	heapify(Tree,Heap) ).     
test(	'test_progs/heapify.pl','Heapify Binary Trees',
	monogrd,
        [Heap],
	heapify(Tree,Heap) ).     
test(	'test_progs/heapify.pl','Heapify Binary Trees',
	monogrd,
        [Tree,Heap],
	heapify(Tree,Heap) ).     

test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[N],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[X],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[Y],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[N,X],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[N,Y],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[X,Y],
	exp(N,X,Y) ).     
test(	'test_progs/exponent.pl','Exponentiation by Multiplication',
	monogrd,
	[N,X,Y],
	exp(N,X,Y) ).     

test(	'test_progs/fact.pl','Factorial',
	monogrd,
	[],
	factorial(N,F) ).     
test(	'test_progs/fact.pl','Factorial',
	monogrd,
	[N],
	factorial(N,F) ).     
test(	'test_progs/fact.pl','Factorial',
	monogrd,
	[F],
	factorial(N,F) ).     
test(	'test_progs/fact.pl','Factorial',
	monogrd,
	[N,F],
	factorial(N,F) ).     



