package Dico;
/**La classe OrderedDictionary spécialise la classe AbstractDictionary
*Cette classe est une spécialisation du framework défini pas l'interface Dictionary et la classe AbstractDictionary
*Dans ce type de dictionnaire, les couples clé-valeur sont rangés pas ordre d'insertion*/
public class OrderedDictionary extends AbstractDictionary {
/**Ce constructeur définit un objet OrderedDictionary avec une taille de dictionnaire de 10 par défaut.*/
public OrderedDictionary() {
tailleTab = 10;
tabCle = new Object[tailleTab];
tabValeur = new Object[tailleTab];
}
/**Ce constructeur définit un objet OrderedDictionary avec une taille de dictionaire passée en paramètre
*@param t taille du dictionnaire*/
public OrderedDictionary(int t) {
tailleTab = t;
tabCle = new Object[tailleTab];
tabValeur = new Object[tailleTab];
}
/**Cette méthode renvoie l'index auquel sera rangé un nouveau couple clé-valeur dans le dictionnaire
*Les couples d'un dictionnaire ordonné étant rangés pas ordre d'insertion, la valeur du nouvel index est égale à la taille du dictionnaire
*Cette méthode ne doit être appelée que dans le cas ou le dictionnaire ne contient pas déjà cette clé
*S'il n'y a pas assez de place dans le dictionnaire pour l'insertion d'un nouvel élément, la taille du dictionnaire est augmentée de 25% par rapport à sa taille initiale
*@param key clé de l'élément à insérer
*@return index du nouvel élément dans le receveur*/
protected int newIndexOf(Object key) {
int index = size();
if (index == tailleTab)
grow();
return index;
}
/**Cette méthode permet d'augmenter la taille du ditionnaire de 25%
*Les clés et les valeurs sont réinsérées dans les nouveaux tableaux de manière séquentielle*/
protected void grow() {
int fin = tailleTab;
if (tailleTab % 4 == 0)
tailleTab = tailleTab + tailleTab / 4;
else
tailleTab = tailleTab + tailleTab / 4 + 1;
if (tailleTab == 0)
tailleTab++;
Object[] newTabCle = new Object[tailleTab];
Object[] newTabValeur = new Object[tailleTab];
for(int i = 0 ; i < fin ; i++) {
newTabCle[i] = tabCle[i];
newTabValeur[i] = tabValeur[i];
}
tabCle = newTabCle;
tabValeur = newTabValeur;
}
/*Test d'insertion d'un élément dans le dictionnaire
1) CRITERES
PRECONDITIONS:
-dictionnaire de taille 0 (T0) / dictionnaire de taille 1 (T1) / dictionnaire de taille quelconque (TN)
-0 élément dans le dictionnaire (D0) / 1 élément dans le dictionnaire (D1) / n éléments dans le dictionnaire (DN)
-élément dans dictionnaire (ED) / élément non dans dictionnaire (END)
POSTCONDITION:
-élément inséré (EI) / élément non inséré (ENI)
2) CLASSES D'EQUIVALENCE
POTENTIELLES : (T0 T1 TN) * (D0 D1 DN) * (ED END) * (EI ENI)
EFFECTIVES : T0*D0*END*EI ;
T1*D0*END*EI ; T1*D1*ED*ENI ; T1*D1*END*EI ;
TN*D0*END*EI ; TN*D1*ED*ENI ; TN*D1*END*EI ; TN*DN*ED*ENI ; TN*DN*END*EI
*/
/*Test de recherche d'un élément dans le dictionnaire
1) CRITERES
PRECONDITIONS:
-dictionnaire de taille 0 (T0) / dictionnaire de taille 1 (T1) / dictionnaire de taille quelconque (TN)
-0 élément dans le dictionnaire (D0) / 1 élément dans le dictionnaire (D1) / n éléments dans le dictionnaire (DN)
-élément en position 0 (E0) / élément en position 1 (E1) / élément en position quelconque (EN)
POSTCONDITION:
-élément trouvé (ET) / élément non trouvé (ENT)
2) CLASSES D'EQUIVALENCE
POTENTIELLES : (T0 T1 TN) * (D0 D1 DN) * (E0 E1 EN) * (ET ENT)
EFFECTIVES : T0*D0*ENT ;
T1*D0*ENT ; T1*D1*E0*ET ;
TN*D0*ENT ; TN*D1*ENT ; TN*D1*E0*ET ; TN*DN*ENT ; TN*DN*E0*ET ; TN*DN*E1*ET ; TN*DN*EN*ET
*/
protected int testBoiteBlanche() {
int retour = 0;
//TEST N°1:
//Insertion : T0*D0*END*EI
//Recherche : T0*D0*ENT
System.out.println("\nTEST N°1:");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire vide \nde taille 0");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire vide \nde taille 0");
OrderedDictionary dico = new OrderedDictionary(0);
if (dico.get("Platon") != null) {
System.out.println("Erreur : L'élément n'aurait pas du être trouvé");
System.out.println("TEST 1 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 1 Recherche ....................................................[OK]");
dico.put("Platon", "Philosophe grec");
if (!dico.containsKey("Platon")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 1 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
if (dico.tailleTab != 1) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 1 Insertion ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 1 Insertion ....................................................[OK]");
}
//TEST N°2:
//Insertion : T1*D0*END*EI
//Recherche : T1*D0*ENT
System.out.println("\nTEST N°2:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire vide \nde taille 1");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire vide \nde taille 1");
dico = new OrderedDictionary(1);
if (dico.get("Platon") != null) {
System.out.println("Erreur : L'élément n'aurait pas du être trouvé");
System.out.println("TEST 2 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 2 Recherche ....................................................[OK]");
dico.put("Platon", "Philosophe grec");
if (!dico.containsKey("Platon")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 2 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 1) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 2 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (dico.size() != 1) {
System.out.println("Erreur : Le dictionnaire devrait contenir un seul élément");
System.out.println("TEST 2 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 2 Insertion ....................................................[OK]");
}
//TEST N°3:
//Insertion : T1*D1*ED*ENI
//Recherche : T1*D1*E0*ET
System.out.println("\nTEST N°3:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire \nde taille 1\nLe dictionnaire contient 1 élément, l'élément à insérer est connu");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire \nde taille 1\nLe dictionnaire contient 1 élément\nL'élément se trouve en position 0");
if (dico.get("Platon") == null) {
System.out.println("Erreur : L'élément aurait du être trouvé en position 0");
System.out.println("TEST 3 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 3 Recherche ....................................................[OK]");
if (!dico.containsKey("Platon")) {
System.out.println("Erreur : L'élément devrait se trouver dans le ditionnaire");
System.out.println("TEST 3 ..............................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 3 Insertion ....................................................[OK]");
//TEST N°4:
//Insertion : T1*D1*END*EI
System.out.println("\nTEST N°4:");
System.out.println("Essai d'insertion d'un élément dans un dictionnaire de taille 1\nLe dictionnaire contient 1 élément, l'élément à insérer est inconnu");
dico.put("Euclide", "Mathématicien grec");
if (!dico.containsKey("Euclide")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 4 ..............................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 2) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 4 ..............................................................[FAILED]");
retour = -1;
drapo = false;
}
if ((String)dico.tabCle[1] != "Euclide") {
System.out.println("Erreur : La position d'insertion est incorrecte");
System.out.println("TEST 4 ..............................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 4 ..............................................................[OK]");
}
//TEST N°5:
//Insertion : TN*D0*END*EI
//Recherche : TN*D0*ENT
System.out.println("\nTEST N°5:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire vide \nde taille n");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire vide \nde taille n");
dico = new OrderedDictionary(4);
if (dico.get("Platon") != null) {
System.out.println("Erreur : L'élément n'aurait pas du être trouvé");
System.out.println("TEST 5 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 5 Recherche ....................................................[OK]");
dico.put("Platon", "Philosophe grec");
if (!dico.containsKey("Platon")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 5 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 4) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 5 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (dico.size() != 1) {
System.out.println("Erreur : Le nombre d'éléments est incorrect");
System.out.println("TEST 5 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if ((String)dico.tabCle[0] != "Platon") {
System.out.println("Erreur : La position d'insertion est incorrecte");
System.out.println("TEST 5 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 5 Insertion ....................................................[OK]");
}
//TEST N°6:
//Insertion : TN*D1*ED*ENI
//Recherche : TN*D1*E0*ET
System.out.println("\nTEST N°6:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient 1 élément, l'élément à insérer est connu");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient 1 élément\nL'élément recherché se trouve en position 0");
if (dico.get("Platon") == null) {
System.out.println("Erreur : L'élément aurait du être trouvé");
System.out.println("TEST 6 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 6 Recherche ....................................................[OK]");
if (!dico.containsKey("Platon")) {
System.out.println("Erreur : L'élément devrait se trouver dans le dictionnaire");
System.out.println("TEST 6 Insertion ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 6 Insertion ....................................................[OK]");
//TEST N°7:
//Insertion : TN*D1*END*EI
//Recherche : TN*D1*ENT
System.out.println("\nTEST N°7:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient 1 élément, l'élément à insérer est inconnu");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient 1 élément");
if (dico.get("Euclide") != null) {
System.out.println("Erreur : L'élément n'aurait pas du être trouvé");
System.out.println("TEST 7 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 7 Recherche ....................................................[OK]");
dico.put("Euclide", "Mathématicien grec");
if (!dico.containsKey("Euclide")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 7 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 4) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 7 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (dico.size() != 2) {
System.out.println("Erreur : Le nombre d'éléments est incorrect");
System.out.println("TEST 7 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if ((String)dico.tabCle[1] != "Euclide") {
System.out.println("Erreur : La position d'insertion est incorrecte");
System.out.println("TEST 7 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 7 Insertion ....................................................[OK]");
}
//TEST N°8:
//Insertion : TN*DN*ED*ENI
//Recherche : TN*DN*E0*ET ; TN*DN*E1*ET ; TN*DN*EN*ET
System.out.println("\nTEST N°8:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient n éléments, l'élément à insérer est connu");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient n éléments\nL'élément se trouve en position 0, 1 ou n");
dico.put("Aristote", "Philosophe grec");
dico.put("Archimède", "Savant grec");
if (dico.get("Platon") == null) {
System.out.println("Erreur : L'élément aurait du être trouvé");
System.out.println("TEST 8 Recherche ....................................................[FAILED]");
retour = -1;
}
if (dico.get("Euclide") == null) {
System.out.println("Erreur : L'élément aurait du être trouvé");
System.out.println("TEST 8 Recherche ....................................................[FAILED]");
retour = -1;
}
if (dico.get("Archimède") == null) {
System.out.println("Erreur : L'élément aurait du être trouvé");
System.out.println("TEST 8 Recherche ....................................................[FAILED]");
retour = -1;
}
if (!dico.containsKey("Aristote")) {
System.out.println("Erreur : L'élément devrait se trouver dans le dictionnaire");
System.out.println("TEST 8 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 4) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 8 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (dico.size() != 4) {
System.out.println("Erreur : Le nombre d'éléments est incorrect");
System.out.println("TEST 8 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 8 Insertion ....................................................[OK]");
}
//TEST N°9:
//Insertion : TN*DN*END*EI
//Recherche : TN*DN*ENT
System.out.println("\nTEST N°9:");
System.out.println("Insertion : Essai d'insertion d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient n éléments, l'élément à insérer est inconnu");
System.out.println("Recherche : Essai de recherche d'un élément dans un dictionnaire \nde taille n\nLe dictionnaire contient n éléments");
if (dico.get("Thalès") != null) {
System.out.println("Erreur : L'élément n'aurait pas du être trouvé");
System.out.println("TEST 9 Recherche ....................................................[FAILED]");
retour = -1;
}
else
System.out.println("TEST 9 Recherche ....................................................[OK]");
dico.put("Thalès", "Mathématicien grec");
if (!dico.containsKey("Thalès")) {
System.out.println("Erreur : L'élément n'a pas été inséré");
System.out.println("TEST 9 Insertion ....................................................[FAILED]");
retour = -1;
}
else {
boolean drapo = true;
if (dico.tailleTab != 5) {
System.out.println("Erreur : La taille du dictionnaire est incorrecte");
System.out.println("TEST 9 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if (dico.size() != 5) {
System.out.println("Erreur : Le nombre d'éléments est incorrect");
System.out.println("TEST 9 Insertion ....................................................[FAILED]");
retour = -1;
drapo = false;
}
if ((String)dico.tabCle[4] != "Thalès") {
System.out.println("Erreur : La position d'insertion est incorrecte");
System.out.println("TEST 9 ..............................................................[FAILED]");
retour = -1;
drapo = false;
}
if (drapo)
System.out.println("TEST 9 Insertion ....................................................[OK]");
}
return retour;
}
}