#include "Pile.h"
#include <iostream>


void Pile::Synopsis()
{	int t = 4,u;
	int tmax = 10;
	int i,s;
	int x;
	int *a,*b,*p;

	Pile A(t);		// Creer une Pile A vide de taille t mots.
	Pile B,C;		// Creer deux Piles B et C vides de taille nulle.
	Pile D(B);		// Construction de la pile D par recopie de B.
	Pile E=B;		// Construction de la pile E par recopie de B.
	
	cout << A;		// Affiche la pile A. Ex : [126,5320,86]
	cin >> A;		// Lit la pile A
	A.put(cout);	// Affiche la pile A. Ex : [126,5320,86]
	A.get(cin);		// Lit la pile A
	A.Rand(tmax);	// Initialise la Pile A au hasard de taille maximum tmax.
	A.Rand();		// Initialise la Pile A au hasard sans changer n.
	A.Muer(t);		// Change la taille de la Pile A en une pile de taille t.
	A.Empile(x);	// Empile x dans la Pile A.
	x=A.Depile();	// Depile x de A.
	
	A=B;			// Affectation de A par B.
	i=(A==B);		// Retourne vrai si A est égale à B.
	i=A.Index(x);	// Index de x dans la pile A, c'est le plus grand i tel que A.o[i]=x.
	A.Supp(x);     	// Supprime une occurence de l'entier x de la pile A (celle de Index(x))
	A.TriA();       // Trie la pile A.
	A.TriAD();      // Trie la pile A en enlevant les doublons.
	A.TriAP();      // Trie la pile A en enlevant les paires.
	A.SuppDoublon();// Supprime les doublons consécutifs dans la pile triée A.
	A.SuppPaire();  // Supprime les paires d'éléments égaux consécutifs dans la pile triée A.
	
	s=Pile::Cmp(a,b);	// Retourne -1 si *a<*b, 0 si *a==*b, 1 si *a>*b.
	A.Qsort();		// Trie la pile A selon l'ordre Pile::Cmp avec la procédure système qsort.
	A.Bsearch(a);   // Recherche la valeur *a dans la Pile triée et retourne un pointeur le désignant ou NULL.

	i = A.PointeurToIndex(p);  // calcule l'indexe correspondant au pointeur p. (A.o[i] = *p)
	p = &A.o[i];	// calcule le pointeur correspondant à l'indexe i.
	
	u=A.t;		// Taille réservée pour la Pile
	u=A.n;		// Nombre d'éléments dand la Pile
	p=A.o;		// Pointeur vers le bloc pile.
	u=A.o[i];	// Elément d'indexe i dans la Pile,  si A.n>0 l'élément de tête est A.o[A.n-1]

Test(10);
TestRand();	
TestRandT();
TestMuer();
TestEgale();
TestCopy();
TestEmpile();
TestDepile();
TestIndex();
TestSupp();
TestSuppDoublon();
TestSuppPaire();
TestTriA();
TestTriAD();
TestTriAP();
Synopsis();
}
