#include <iostream>
#include <vector>
#include <deque>
#include <string>

using namespace std;

int testerVector();
int testerDeque();

int main()
{
    string choix("pour l'instant rien");
    cout << "Entrer le tableau dynamique à tester >> ";
    cin >> choix;


    if (choix == "vector")
    {
        cout << "Démarrge du test du vector." << endl << endl;
        return testerVector();
    }

    if (choix == "deque")
    {
        cout << "Démarrge du test de la deque." << endl << endl;
        return testerDeque();
    }

    if (choix == "lucien")
    {
        deque<int> tabl(0);
        tabl.push_back(44);
        tabl.push_back(88);
        tabl.push_front(22);

        cout << tabl.back() << endl;

        cout << "Taille 1: " << tabl.size() << endl;

        tabl.pop_front();

        cout << "Taille 2: " << tabl.size() << endl;

        cout << tabl.empty() << endl;

        tabl.clear();

        cout << tabl.empty() << endl;


        return 0;
    }

    cout << "Commande non-reconnue. Fermeture du programme." << endl;
    return 0;
}

int testerVector()
{
    cout << "Voci un tableau nommé ''vector'', avec un petit bonus à la fin. ;-)" << endl;

    //[1] Création du vector
    vector<int> ralonge;

    //[2] On remplit !
    string choix;
    int ajout;
    bool done;
    do
    {
        cout<<"Entrez une valeur à ajouter >> ";
        cin>>ajout;
        ralonge.push_back(ajout);
        cout<<"Voulez vous ajouter une autre valeur ? (o/O/oui/Oui ou alors n/N/non/Non) >> ";
        cin>>choix;
        if (choix=="n"||choix=="N"||choix=="non"||choix=="Non")
            done=true;
        else if (choix=="o"||choix=="O"||choix=="oui"||choix=="Oui")
            done=false;
        cout<< endl << endl;

    }while (done == false);

    //[3] Résultats
    int total(0);
    int comparant(ralonge.size());
    for (int i(0); i<comparant ; i++)
    {
        cout<<ralonge[i]<<" est la valeur de la "<<i+1<<"eme case."<<endl;
        total+=ralonge[i];
    }
    cout << "La moyenne est "<<total/comparant<<" !!! Merci qui ?"<<endl;

    return 0;
}

int testerDeque()
{
    cout << "Voci un tableau nommé ''deque'', avec un petit bonus à la fin. XD" << endl;

    //[1] Création du tabl
    deque<float*> dobleQu;
    for (int i(0); i<5; i++)
        dobleQu.push_back(new float(-2.5));

    //[2] On remplit !
    string choix;
    float ajout;
    bool done;
    do
    {
        cout<<"Entrez une valeur à ajouter >> ";
        cin>>ajout;
        if (dobleQu.back()!=0)
            delete dobleQu.back();
        dobleQu.pop_back();
        dobleQu.push_front(new float(ajout));

        cout << endl;
        for (unsigned int i(0); i<dobleQu.size(); i++)
        {
            cout<<dobleQu[i]<<" RAM case address"<<endl;
        }
        cout << endl;

        cout<<"Voulez vous ajouter une autre valeur ? (o/O/oui/Oui ou alors n/N/non/Non) >> ";
        cin>>choix;
        if (choix=="n"||choix=="N"||choix=="non"||choix=="Non")
            done=true;
        else if (choix=="o"||choix=="O"||choix=="oui"||choix=="Oui")
            done=false;
        cout<< endl << endl;

    }while (done == false);


    //[3] Résultats
    for (unsigned int i(0); i<dobleQu.size(); i++)
    {
        cout<<*dobleQu[i]<<" est la valeur de la "<<i+1<<"eme case."<<endl;
    }

    //[4] On vide ce tas de pointeurs !!!
    while (!dobleQu.empty())
    {
        if (dobleQu.back()!=0)
            delete dobleQu.back();
        dobleQu.pop_back();
    }

    return 0;
}