
#include <iostream>


#include "PList.h"

using namespace std;

int main(int argc, char** argv){
	
	PList<int> listeEntier;
	
	listeEntier << 1 << 2 << 3 << 4;
	
	cout << "ListeEntier = " << listeEntier << endl;
	cout << "First Element  = " << listeEntier.front() << endl;
	cout << "Last Element  = " << listeEntier.back() << endl;
	
	PIterator<int> it(listeEntier.begin());
	cout << "Initialisation iterateur begin = " << *it << endl;
	++it;
	cout << "Initialisation iterateur ++begin = " << *it << endl;
	it++;
	cout << "Initialisation iterateur 3 = " << *it << endl;
	
	cout << "Test de l'opérateur []" << endl;
	cout << "listeEntier[3] = " << listeEntier[3] << endl;
	
	cout << "Test de la fonction listeEntier.setAt(42, 2)" << endl;
	listeEntier.setAt(42, 2);
	cout << "ListeEntier = " << listeEntier << endl;
	
	cout << "Test de l'opérateur [] non constant" << endl;
	listeEntier[1] = 23;
	cout << "listeEntier[1] = 23" << endl;
	cout << "ListeEntier = " << listeEntier << endl;
	
	cout << "Bon, comme ça fonctionne bien on va tester les rbegin et rend" << endl;
	for(PIterator<int> pit(listeEntier.rbegin()); pit != listeEntier.rend(); pit--){
		cout << *pit << ", ";
	}
	cout << endl;
	cout << "On regarde si rien n'a changer dans la liste :" << endl;
	cout << "Size = "  << listeEntier.size() << " , ListeEntier = " << listeEntier << endl;
	
	cout << "Maintenant on dégomme le premier élément :" << endl;
	listeEntier.popFront();
	cout << "Size = "  << listeEntier.size() << " , ListeEntier = " << listeEntier << endl;
	
	cout << "Maintenant la copie de PList" << endl;
	PList<int> autreListe;
	autreListe = listeEntier;
	cout << "Size = "  << autreListe.size() << " , autreListe = " << autreListe << endl;
	
	cout << "Test de la fonction erase(int index), listeEntier.erase(1);" << endl;
	cout << "listeEntier.erase(1) = " << listeEntier.erase(1) << endl;
	cout << "Size = "  << listeEntier.size() << " , ListeEntier = " << listeEntier << endl;
	
	cout << "Test de pushFront" << endl;
	cout << "listeEntier.pushFront(autreListe);" << endl;
	listeEntier.pushFront(autreListe);
	cout << "Size = "  << listeEntier.size() << " , ListeEntier = " << listeEntier << endl;
	cout << "Test de pushBack avec une liste" << endl;
	listeEntier.pushBack(autreListe);
	cout << "listeEntier.pushBack(autreListe);" << endl;
	cout << "Size = "  << listeEntier.size() << " , ListeEntier = " << listeEntier << endl;
	return 0;
}


