import static org.junit.Assert.assertTrue; // import static : une facilité offerte depuis java5 (pas besoin de mettre le préfixe)
import static org.junit.Assert.assertFalse; //
import static org.junit.Assert.assertSame; //
import org.junit.Test;


import java.util.NoSuchElementException;
import java.util.Random;


/**
 * Une classe pour faire des tests sur la classe SimpleDeque avec JUnit
 * On utlise des string comme type paramétré.
 */
public class TestSimpleDeque {


    /**
     * On ne peut pas ajouter avec addFirst l'élément null 
     * [0.5 point]
     */
    @Test
    public void addFirstNull(){
	MinimalDeque<String> d = new SimpleDeque<String>();
	
        d.addFirst(null);
        d.contains(null);
    }

    /**
     * On ne peut pas ajouter avec addLast l'élément null 
     * [0.5 point]
     */
    @Test
    public void addLastNull(){

    }
    
    /**
     * Un deque sans élément est vide.
     * [0.5 point]
     */
    @Test
    public void addNoneIsEmpty(){

    }
    
    /**
     * Un deque avec 1 élément n'est pas vide.
     * [0.5 point]
     */
    @Test
    public void addOneIsNotEmpty(){

    }

    
    /**
     * Dans un deque vide ajouter devant "ga" "bu" "zo" "meu" devant puis enlever à la fin me redonne les mêmes string (identiques aux précédents) et dans le même ordre. 
     * [1 point]
     */
    @Test
    public void pasDeResquilleur(){
	MinimalDeque<String> d = new SimpleDeque<String>();
	String ga = "ga";
	String bu = "bu";
	String zo = "zo";
	String meu = "meu";

    }

    /**
     * Dans un deque vide ajouter "ga" "bu" "zo" "meu" derrière puis enlever au débutr me redonne les mêmes string (identiques aux précédents) et dans le même ordre. 
     * [1 point]
     */
    @Test
    public void pasDeResquilleurQuantique(){

    }

    /**
     * On ne peut pas enlever d'élément devant d'un deque vide.
     * [1 point]
     */
    @Test
    public void removeFirstFromEmpty(){

    }    

    /**
     * On ne peut pas enlever d'élément derrière d'un deque vide.
     * [1 point]
     */
    @Test
    public void removeLastFromEmpty(){

    }    

    /**
     * Dans un deque vide ajouter "ga" puis enlever me redonne le même string que ajouter ou enlever soit devant oui derrière. 
     * [2 point]
     */
    @Test
    public void mangerLaBananeParLesDeuxBouts(){
	MinimalDeque<String> d = new SimpleDeque<String>();
	String ga = "ga";

    }


    /**
     * Invariant de taille
     * Lancer un nombre entier aléatoire N compris entre 100 et 1000 (inclus).
     *
     * Ajouter au hasard, devant ou derrière N éléments tirés au hasard dans {"Ga", "bu", "zo", "meu"}.
     *
     * Enlever au hasard, devant ou derrière N éléments.
     *
     * Vérifier finalement que la Deque est vide.
     *
     * [4 point]
     */
    @Test
    public void invariantTaille(){
	MinimalDeque<String> d = new SimpleDeque<String>();
	String[] s = {"ga","bu","zo","meu"};
	Random rd = new Random();

	int N = rd.nextInt(42)+4;

	// rd.nextBoolean())

	
	// s[rd.nextInt(4)])
	
    }

    

    
}
