Codes sources prototype 1

This commit is contained in:
SylvanCourtiol
2021-05-09 17:42:30 +02:00
parent 14d39af284
commit a1161d0399
16 changed files with 1144 additions and 73 deletions
@@ -6,6 +6,8 @@
package interpreteurlir.donnees;
import interpreteurlir.InterpreteurException;
/**
* @author Nicolas Caminade
* @author Sylvan Courtiol
@@ -29,7 +31,7 @@ implements Comparable<Identificateur> {
public Identificateur(String identificateur) {
super();
if(!isIdentificateur(identificateur)) {
throw new IllegalArgumentException(identificateur
throw new InterpreteurException(identificateur
+ " n'est pas un identificateur");
}
@@ -6,6 +6,8 @@
package interpreteurlir.donnees;
import interpreteurlir.InterpreteurException;
/**
* Identificateur de chaîne
* @author Nicolas Caminade
@@ -19,13 +21,14 @@ public class IdentificateurChaine extends Identificateur {
/**
* Instantiation d'identificateur de chaîne
* @param identificateur a instancier
* @throws IllegalAccessException si l'identificateur est invalide
* @throws InterpreteurException si l'identificateur est invalide
*/
public IdentificateurChaine(String identificateur) {
super(identificateur);
super(identificateur.trim());
identificateur = identificateur.trim();
if(!isIdentificateurChaine(identificateur)) {
throw new IllegalArgumentException(identificateur
throw new InterpreteurException(identificateur
+ " n'est pas un identificateur"
+ " de chaine");
}
@@ -6,6 +6,8 @@
package interpreteurlir.donnees;
import interpreteurlir.InterpreteurException;
/**
* Identificateur d'entier
* @author Nicolas Caminade
@@ -19,15 +21,15 @@ public class IdentificateurEntier extends Identificateur {
/**
* Instantiation d'identificateur d'entier
* @param identificateur a instancier
* @throws IllegalAccessException si l'identificateur est invalide
* @throws InterpreteurException si l'identificateur est invalide
*/
public IdentificateurEntier(String identificateur) {
super(identificateur);
if(!isIdentificateurEntier(identificateur)) {
throw new IllegalArgumentException(identificateur
+ " n'est pas un identificateur"
+ " d'entier");
throw new InterpreteurException(identificateur
+ " n'est pas un identificateur"
+ " d'entier");
}
}
+54 -41
View File
@@ -1,80 +1,93 @@
/**
* Variable.java 8 mai 2021
* IUT Rodez info1 2020-2021, pas de copyright, aucun droit
* Variable.java 8 mai 2021
* IUT-Rodez info1 2020-2021, pas de droits, pas de copyrights
*/
package interpreteurlir.donnees;
import interpreteurlir.donnees.litteraux.Chaine;
import interpreteurlir.donnees.litteraux.Litteral;
import interpreteurlir.InterpreteurException;
/** TODO commenter la responsabilité de cette classe
* BOUCHON
/**
* Associe un littéral à un identificateur
*
* @author Nicolas Caminade
* @author Sylvan Courtiol
* @author Pierre Debas
* @author Heïa Dexter
* @author Heia Dexter
* @author Lucas Vabre
*
*/
public class Variable implements Comparable<Variable> {
public class Variable extends Object implements Comparable<Variable> {
/** BOUCHON identificateurs car Identificateurs non finis */
/** Identificateur de cette variable */
private Identificateur identificateur;
/** BOUCHON valeur*/
/** Valeur de cette variable */
private Litteral valeur;
/** TODO commenter l'état initial
* @param id
* @param valeur
/**
* Initialise une variable
* @param identificateur associé à cette variable
* @param valeur associé à cette variable
* @throws InterpreteurException en cas d'incompatibilité entre
* l'identificateur et le type de la valeur à lui associer
*/
public Variable(Identificateur id, Litteral valeur) {
super();
this.identificateur = id;
public Variable(Identificateur identificateur, Litteral valeur) {
if (!isVariable(identificateur, valeur)) {
throw new InterpreteurException("Identificateur '"
+ identificateur.toString()
+ "' et type de "
+ valeur.toString()
+ "incompatible.");
}
this.identificateur = identificateur;
this.valeur = valeur;
}
private static boolean isVariable(Identificateur id, Litteral valeur) {
return id instanceof IdentificateurChaine && valeur instanceof Chaine
/* || id instanceof IdentificateurEntier && valeur instanceof Entier */;
}
/**
* @return valeur de valeur
* @return la valeur de cette variable
*/
public Litteral getValeur() {
return valeur;
}
/**
* @param valeur nouvelle valeur de valeur
/**
* Modifie la valeur de cette variable
* @param nouvelleValeur
*/
public void setValeur(Litteral valeur) {
this.valeur = valeur;
}
/* non javadoc
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Variable o) {
// bouchon
return identificateur.compareTo(o.identificateur);
public void setValeur(Litteral nouvelleValeur) {
if (isVariable(identificateur, nouvelleValeur)) {
this.valeur = nouvelleValeur;
}
}
/**
* @return valeur de id
/**
* @return l'identificateur de cette variable
*/
public Identificateur getIdentificateur() {
return identificateur;
}
/* non javadoc
* @see java.lang.Object#toString()
*/
/* non javadoc @see java.lang.Object#toString() */
@Override
public String toString() {
return identificateur + " = " + valeur;
return identificateur.toString() + " = " + valeur.toString();
}
public int compareTo(Variable aComparer) {
return identificateur.compareTo(aComparer.identificateur);
}
}
}
@@ -38,7 +38,7 @@ public class Chaine extends Litteral {
* @param uneValeur
*/
public Chaine(String uneValeur) {
uneValeur = uneValeur.trim();
if (!uneValeur.startsWith("\"") || !uneValeur.endsWith("\"")) {
throw new InterpreteurException(ERREUR_INVALIDE
+ uneValeur);
@@ -61,7 +61,7 @@ public class Chaine extends Litteral {
*/
public static Chaine concatener(Chaine a, Chaine b) {
return null;
return new Chaine("\"" + a.valeur + b.valeur + "\"");
}
/* non javadoc
@@ -7,6 +7,8 @@ package interpreteurlir.donnees.litteraux.tests;
import interpreteurlir.InterpreteurException;
import interpreteurlir.donnees.litteraux.Chaine;
import static info1.outils.glg.Assertions.*;
/**
* Tests unitaires de Chaine
* @author Nicolas Caminade
@@ -111,6 +113,32 @@ public class TestChaine {
System.out.println("==>test terminé\n");
}
/**
* Tests unitaires de concaténer
*/
public void testConcatener() {
final Chaine[] ATTENDU = {
new Chaine(),
new Chaine("\"Bonjour le monde ! \""),
new Chaine("\" \""),
new Chaine("\"3,1415\""),
};
final Chaine[][] A_CONCATENER = {
{new Chaine(), new Chaine("\"\"")},
{new Chaine("\"Bonjour \""), new Chaine("\"le monde ! \"")},
{new Chaine("\"\""), new Chaine("\" \"")},
{new Chaine("\"3,\""), new Chaine("\"1415\"")},
};
System.out.println("\tExécution du test de concaténer");
for (int numTest = 0 ; numTest < ATTENDU.length ; numTest++ ) {
assertTrue(ATTENDU[numTest].compareTo(Chaine.concatener(
A_CONCATENER[numTest][0], A_CONCATENER[numTest][1]))
== 0);
}
}
/**
* Lancement des tests
* @param args non utilisés
@@ -0,0 +1,210 @@
/**
* TestVariable.java 8 mai 2021
* IUT-Rodez info1 2020-2021, pas de droits, pas de copyrights
*/
package interpreteurlir.donnees.tests;
import interpreteurlir.donnees.Variable;
import interpreteurlir.donnees.IdentificateurChaine;
import interpreteurlir.donnees.IdentificateurEntier;
import interpreteurlir.donnees.litteraux.*;
import interpreteurlir.InterpreteurException;
import static info1.outils.glg.Assertions.*;
/**
* Tests unitaires de la classe Variable
*
* @author Nicolas Caminade
* @author Sylvan Courtiol
* @author Pierre Debas
* @author Heia Dexter
* @author Lucàs Vabre
*/
public class TestVariable {
/** Jeu d'identificateurs de chaîne valides */
private static final IdentificateurChaine[] ID_CHAINE = {
new IdentificateurChaine("$a"),
new IdentificateurChaine("$B"),
new IdentificateurChaine("$alpha"),
new IdentificateurChaine("$Alpha"),
new IdentificateurChaine("$Alpha5"),
new IdentificateurChaine("$jeSuisUnTresLongIdentifi"),
new IdentificateurChaine("$R2D2"),
new IdentificateurChaine("$MichelSardou"),
new IdentificateurChaine("$PhilippePoutou2022")
};
/** Jeu d'identificateurs d'entier valides */
private static final IdentificateurEntier[] ID_ENTIER = {
new IdentificateurEntier("a"),
new IdentificateurEntier("A"),
new IdentificateurEntier("alpha"),
new IdentificateurEntier("Alpha"),
new IdentificateurEntier("Alpha5"),
new IdentificateurEntier("jeSuisUnTresLongIdentifi"),
new IdentificateurEntier("R2D2"),
new IdentificateurEntier("MichelSardou"),
new IdentificateurEntier("PhilippePoutou2022")
};
/** Jeu de chaînes valides */
private static final Chaine[] VALEURS_CHAINE = {
new Chaine(),
new Chaine("\"arztyehjklmpoijhghnbghjklmpoiuytrf"
+ "ghjnklmpoiuytrezaqsdfghnjklmpjbfrtyu\""),
new Chaine("\"\""),
new Chaine("\"coucou \""),
new Chaine("\"" + Integer.toString(42) + "\""),
new Chaine("\"Bidon\""),
new Chaine("\"toto\""),
new Chaine("\"tata\t\""),
new Chaine("\"titi\n\"")
};
// /** Jeu d'entiers valides */
// private static final Entier[] VALEUR_ENTIER = {
// // TODO: jeu d'entiers valide
// };
/** Jeu de variables chaîne valides*/
private static Variable[] fixtureChaine = new Variable[ID_CHAINE.length];
/* Jeu de variables entières valides*/
//private static Variable[] fixtureEntier= new Variable[ID_ENTIER.length];
private static void fixtureReload() {
for (int i = 0; i < ID_CHAINE.length; i++) {
fixtureChaine[i] = new Variable(ID_CHAINE[i], VALEURS_CHAINE[i]);
}
//TODO reload fixtureEntier
}
/**
* Test unitaire du constructeur Variable(Identificateur, Littéral)
*/
public static void testVariableIdentificateurChaineLitteral() {
for (int noJeu = 0; noJeu < VALEURS_CHAINE.length; noJeu++) {
try {
//new Variable(ID_CHAINE[noJeu], VALEURS_CHAINE[noJeu]); // bouchon
new Variable(ID_ENTIER[noJeu], VALEURS_CHAINE[noJeu]);
// TODO tester avec la classe Entier
// new Variable(ID_CHAINE[noJeu], VALEURS_ENTIER[noJeu]);
echec();
} catch (InterpreteurException lancee) {
// test OK
}
}
}
/**
* Test unitaire de getIdentificateur() d'une variable chaîne
*/
public static void testGetIdentificateurChaine() {
fixtureReload();
for (int i = 0; i < VALEURS_CHAINE.length; i++ ) {
assertTrue(ID_CHAINE[i].compareTo(fixtureChaine[i]
.getIdentificateur()) == 0);
}
}
/**
* Test unitaire de getIdentificateur() d'une variable entière
*/
public static void testGetIdentificateurEntier() {
// fixtureReload();
//
// for (int i = 0; i < VALEURS_Entier.length; i++ ) {
// assertTrue(ID_ENTIER[i].compareTo(fixtureEntier[i]
// .getIdentificateur()) == 0);
// }
echec();
}
/**
* Test unitaire de getValeur() d'une variable chaîne
*/
public static void testGetValeurChaine() {
fixtureReload();
for (int i = 0; i < VALEURS_CHAINE.length; i++ ) {
assertTrue(VALEURS_CHAINE[i]
.compareTo(fixtureChaine[i].getValeur()) == 0);
}
}
/**
* Test unitaire de setValeur() d'une chaîne
*/
public static void testSetValeurChaine() {
fixtureReload();
final Chaine[] NOUVELLE_CHAINE = {
new Chaine("\"titi\""),
new Chaine("\"Mathématiques\""),
new Chaine("\"!?9563Message\""),
new Chaine("\"test TESTS\""),
new Chaine("\"-5 + 962\"")
};
for (int i = 0; i < NOUVELLE_CHAINE.length; i++) {
fixtureChaine[i].setValeur(NOUVELLE_CHAINE[i]);
assertTrue(NOUVELLE_CHAINE[i]
.compareTo(fixtureChaine[i].getValeur()) == 0);
}
}
/**
* Test unitaire de toString()
*/
public static void testToString() {
fixtureReload();
final String[] ATTENDUS = {
"$a = \"\"",
"$B = \"arztyehjklmpoijhghnbghjklmpoiuytrf"
+ "ghjnklmpoiuytrezaqsdfghnjklmpjbfrtyu\"",
"$alpha = \"\"",
"$Alpha = \"coucou \"",
"$Alpha5 = \"42\"",
"$jeSuisUnTresLongIdentifi = \"Bidon\"",
"$R2D2 = \"toto\"",
"$MichelSardou = \"tata\t\"",
"$PhilippePoutou2022 = \"titi\n\""
};
for (int noJeu = 0; noJeu < fixtureChaine.length; noJeu++ ) {
assertEquivalence(fixtureChaine[noJeu].toString(),
ATTENDUS[noJeu]);
}
}
/**
* Test unitaire de compareTo()
*/
public static void testCompareTo() {
fixtureReload();
final Variable REF_MIN
= new Variable(new IdentificateurChaine("$A"),
new Chaine("\"Min\""));
final Variable REF_MAX
= new Variable(new IdentificateurChaine("$z"),
new Chaine("\"Max\""));
for(int noJeu = 0; noJeu < fixtureChaine.length; noJeu++) {
assertTrue(fixtureChaine[noJeu].compareTo(REF_MIN) > 0);
assertTrue(fixtureChaine[noJeu].compareTo(REF_MAX) < 0);
assertTrue(fixtureChaine[noJeu].compareTo(fixtureChaine[noJeu]) == 0);
}
// TODO Faire le même test pour les variables contenant des entiers
}
}