| Votre opinion sur le cours de ce matin : | Votre opinion sur le TD de la semaine dernière : | 
    Soit une interface I et une spécification informelle des
    méthodes qu'elle déclare. Le but de ce TD est d'écrire des tests qui
    éprouvent toute classe C qui implémente I.
    Le TD sera réalisé en Java (créer pour cela le projet td5)
    bien que la méthodologie qu'il propose s'applique à tout autre langage de
    programmation.
    
testI telle que pour chaque classe
    C dont la déclaration est de la forme
    
        class C implements I {
          ...
        }
    
    un appel à
    
    testI(new C(...), ...)
    
    effectue une batterie de tests sur l'objet de la classe C
    passé en argument et affiche un diagnostic à l'écran.
    (Les points de suspension représentent ici d'éventuels paramètres
    nécessaires au constructeur et aux tests.)
    
    Confinement
    
    La batterie de tests lancée par testI(new C(...), ...) ne
    doit donc jamais « planter » au sens où,
    pour toute exception levée durant l'exécution d'une méthode
    de C
    
I, elle doit être rattrapée
      (et considérée comme correcte) ;
    I, elle doit être signalée
      comme un comportement inattendu.
            try {
              ... code susceptible de lever une exception de classe E ...
             }
            catch (E e) {
              ... traitement du cas exceptionnel ... 
             }
          
    
    
    On va tester ici des programmes de tri.
    On fournit un fichier intsort.zip
    qui doit être décompressé
    dans le répertoire src/ (par exemple
    avec la commande unzip
    intfifo.zip). Il contient notamment une interface
    Sort
    dont l'unique méthode
    
        public void sort(int[] a);
    
     effectue un tri en place du tableau d'entiers a,
    ainsi que plusieurs classes qui implémentent Sort.
    
    
    Écrire une classe TestSort dans le paquet default
    qui teste si une classe qui implémente Sort répond à la spécification
    suivante :
    
sort le tableau a
        est trié par ordre croissant ;sort laisse invariant le nombre d'occurrences
        d'un entier dans le tableau a.
    L'appliquer sur les différents tris fournis
    (Sort1.java, Sort2.java, etc.)
    pour déterminer l'unique tri qui est correct.
    Pour un code incorrect, on essayera de donner à chaque fois
    un contre-exemple indiquant la provenance du dysfonctionnement observé.
    
Bien entendu, il faut jouer le jeu et ne pas regarder le code des différentes classes fournies.
    Déposer le fichier TestSort.java :
    
    
src/ (par exemple
    avec la commande unzip
    intfifo.zip). Il contient notamment
    une interface FIFO
    dont la spécification est la suivante :
    int size() renvoie le nombre d'éléments contenus dans la file. void put(int n) ajoute un élément à la fin de la
    file s'il reste de la place ;FullQueueException.int get() supprime et renvoie le premier élément de la file lorsqu'elle n'est pas vide;
    EmptyQueueException.FIFOWrapper dans le
    paquet default contenant (entre autres) :
    FIFOWrapper(FIFO f, int max)
    qui prend en arguments une file et sa capacité de stockage i.e. le
    nombre maximum d'éléments qu'elle peut contenir.
    size représentant le nombre exact
    d'éléments (supposés) contenus dans la file f.
    int size() qui renvoie le résultat de
      f.size(), après l'avoir comparé au
      champ size.
    void put(int n) qui
    appelle f.put(n), vérifie le comportement en termes
    d'exception et vérifie que f.size() est bien mis à jour.
    int get(int e) qui appelle
    f.get(), vérifie que le résultat est égal
    à e, le cas échéant, vérifie le comportement en termes
    d'exception et vérifie que f.size() est bien mis à jour.
    Déposer le fichier FIFOWrapper.java :
    À l'aide de la classe FIFOWrapper, écrire une
    classe TestFIFO à même de tester une implémentation
    de FIFO.
    
    L'appliquer sur les différents programmes fournis
    (Queue1.java, Queue2.java, etc.)
    pour déterminer l'unique code qui est correct.
    Pour un code incorrect, on essayera de donner à chaque fois
    un contre-exemple indiquant la provenance du dysfonctionnement observé.
    
    
Bien entendu, il faut là encore jouer le jeu et ne pas regarder le code des différentes classes fournies.
Déposer le fichier TestFIFO.java :
Une solution vous est proposée.