Prototype 2.0

This commit is contained in:
SylvanCourtiol
2021-05-16 18:17:28 +02:00
parent ac38617077
commit 60219ea6d9
41 changed files with 3922 additions and 277 deletions
@@ -20,7 +20,8 @@ public class Chaine extends Litteral {
public static final int LG_MAX_CHAINE = 70;
/** Erreur chaîne trop longue */
private static final String ERREUR_LG_MAX = "Longueur maximale dépassée";
private static final String ERREUR_LG_MAX =
"Longueur maximale d'une chaîne dépassée";
/** Erreur constante littéral chaîne invalide */
private static final String ERREUR_INVALIDE =
@@ -69,7 +70,6 @@ public class Chaine extends Litteral {
*/
@Override
public int compareTo(Litteral autre) {
// TODO Auto-generated method stub
return this.valeur.toString().compareTo(autre.valeur.toString());
}
+149 -11
View File
@@ -4,21 +4,86 @@
*/
package interpreteurlir.donnees.litteraux;
import interpreteurlir.ExecutionException;
import interpreteurlir.InterpreteurException;
/**
* BOUCHON
* @author
*
* Constante littérale de type entier
*
* @author Nicolas Caminade
* @author Sylvan Courtiol
* @author Pierre Debas
* @author Heia Dexter
* @author Lucas Vabre
*/
public class Entier extends Litteral {
private static final int LONG_CH_MAX = 11;
/** Valeur entière minimale */
public static int VALEUR_MIN = Integer.MIN_VALUE;
/** TODO commenter l'état initial
* @param i
/** Valeur entière minimale */
public static int VALEUR_MAX = Integer.MAX_VALUE;
/**
* Initialisation de cet entier avec une valeur passée en argument
* @param unEntier
* @throws InterpreteurException lorsque entier n'est pas un Entier
*/
public Entier(int i) {
super(Integer.valueOf(i));
// TODO Auto-generated constructor stub
valeur = i;
@SuppressWarnings("boxing")
public Entier(int unEntier) {
if (! isEntier(unEntier)) {
throw new InterpreteurException("Erreur. " + unEntier
+ " n'est pas un entier. ");
}
super.valeur = unEntier;
}
/**
* Initialisation de cet entier avec une valeur passée en argument
* @param uneValeur
*/
public Entier(String uneValeur) {
if (!isEntier(uneValeur)) {
throw new InterpreteurException(uneValeur
+ " n'est pas un nombre entier. ");
}
valeur = Integer.valueOf(uneValeur);
}
private static boolean isEntier(String uneValeur) {
if (uneValeur != null && !uneValeur.isBlank()
&& uneValeur.length() <= LONG_CH_MAX
&& (isChiffre(uneValeur.charAt(0))
|| uneValeur.length() > 1 && (uneValeur.charAt(0) == '-'
|| uneValeur.charAt(0) == '+'))) {
int i;
for (i = 1; i < uneValeur.length() && isChiffre(uneValeur.charAt(i));
i++)
; /* corps vide */
if ((uneValeur.startsWith("+214748364")
|| uneValeur.startsWith("214748364"))
&& uneValeur.charAt(uneValeur.length() - 1) > '7'
|| uneValeur.startsWith("-214748364")
&& uneValeur.charAt(uneValeur.length() - 1) > '8'
)
return false;
return i >= uneValeur.length();
}
return false;
}
private static boolean isChiffre(char caractere) {
return '0' <= caractere && caractere <= '9';
}
private static boolean isEntier(int entier) {
return VALEUR_MIN <= entier && entier <= VALEUR_MAX;
}
/* non javadoc
@@ -28,7 +93,80 @@ public class Entier extends Litteral {
public String toString() {
return valeur.toString();
}
@Override
public Integer getValeur() {
return (Integer) super.valeur;
}
/**
* Compare cet entier à un autre entier
* @param autre
* @return une valeur < 0 lorsque autre > cet entier
* une valeur > 0 lorsque autre < cet entier
* une valeur = 0 lorsque autre et cet entier sont égaux
*/
public int compareTo(Entier autre) {
return ((Integer) valeur).compareTo(autre.getValeur());
}
/**
* Somme de deux entiers
* @param premier Entier
* @param second Entier
* @return la somme des deux entiers
*/
public static Entier somme(Entier premier, Entier second) {
return new Entier((int) premier.getValeur() + (int) second.getValeur());
}
/**
* Soustraction de deux entiers
* @param premier Entier
* @param second Entier
* @return le résultat de premier auquel on soustrait second
*/
public static Entier soustrait(Entier premier, Entier second) {
return new Entier((int) premier.getValeur() - (int) second.getValeur());
}
/**
* Multiplication de deux entiers
* @param premier Entier
* @param second Entier
* @return le résultat de premier multiplié par second
*/
public static Entier multiplie(Entier premier, Entier second) {
return new Entier((int) premier.getValeur() * (int) second.getValeur());
}
/**
* Division de deux entiers
* @param premier Entier
* @param second Entier
* @return le quotient de la division de premier par second
* @throws ExecutionException lorsque le diviseur est nul
*/
public static Entier quotient(Entier premier, Entier second) {
if (second.compareTo(new Entier (0)) == 0) {
throw new ExecutionException("Erreur. Division par 0. ");
}
return new Entier((int) premier.getValeur() / (int) second.getValeur());
}
/**
* Division de deux entiers
* @param premier Entier
* @param second Entier
* @return le reste de la division de premier par second
* @throws ExecutionException lorsque le diviseur est nul
*/
public static Entier reste(Entier premier, Entier second) {
if (second.compareTo(new Entier (0)) == 0) {
throw new ExecutionException("Erreur. Division par 0. ");
}
return new Entier((int) premier.getValeur() % (int) second.getValeur());
}
}
@@ -0,0 +1,301 @@
/**
* TestEntier.java 13 mai 2021
* IUT-Rodez info1 2020-2021, pas de droits, pas de copyrights
*/
package interpreteurlir.donnees.litteraux.tests;
import interpreteurlir.ExecutionException;
import interpreteurlir.InterpreteurException;
import interpreteurlir.donnees.litteraux.Entier;
import static interpreteurlir.donnees.litteraux.Entier.*;
import static info1.outils.glg.Assertions.*;
import static java.lang.Integer.MIN_VALUE;
import static java.lang.Integer.MAX_VALUE;
/**
* Tests des méthode de la classe Entier
*
* @author Nicolas Caminade
* @author Sylvan Courtiol
* @author Pierre Debas
* @author Heia Dexter
* @author Lucas Vabre
*/
public class TestEntier {
/** Jeu d'entiers correctement instanciés à partir d'un entier */
private final Entier[] ENTIERS_INT = {
new Entier(MIN_VALUE),
new Entier(MAX_VALUE),
new Entier(1),
new Entier(-4587),
new Entier(-569),
new Entier(-3),
new Entier(0),
new Entier(2),
new Entier(78),
new Entier(781),
new Entier(179892),
};
/** Jeu d'entiers correctement instanciés */
private final Entier[] ENTIERS_STRING = {
new Entier("1"),
new Entier("-4587"),
new Entier("-569"),
new Entier("-3"),
new Entier("0"),
new Entier("2"),
new Entier("78"),
new Entier("781"),
new Entier("179892"),
new Entier("-2147483648"),
new Entier("2147483647"),
};
/** Jeu d'integers correspondants */
private static final int[] INT_VALIDES = {
MIN_VALUE,
MAX_VALUE,
1,
-4587,
-569,
-3,
0,
2,
78,
781,
179892,
};
/**
* Test unitaire du constructeur Entier(String)
*/
public static void testEntierString() {
final String[] INVALIDES = {
null,
"",
" ",
"\t",
"\n",
"a",
"michel",
"Janis Joplin",
"(93)",
" 78.3",
"2147483648756",
"2147483648",
"+2147483648",
"-2147483649",
"-",
"+",
};
for (int i = 0; i < INVALIDES.length; i++) {
try {
new Entier(INVALIDES[i]);
echec();
} catch (InterpreteurException lancee) {
// Test OK
}
}
}
/**
* Test unitaire de la méthode toString()
*/
public void testToString() {
for (int i = 0; i < INT_VALIDES.length; i ++) {
assertTrue(ENTIERS_INT[i].toString()
.compareTo(Integer.toString(INT_VALIDES[i])) == 0);
}
}
/**
* Test unitaire de la méthode toCompareTo()
*/
public void testCompareTo() {
final Entier REF_MIN = new Entier(MIN_VALUE);
final Entier REF_MAX = new Entier(MAX_VALUE);
for (int i = 2; i < ENTIERS_INT.length; i++) {
assertTrue(REF_MIN.compareTo(ENTIERS_INT[i]) < 0);
assertTrue(REF_MAX.compareTo(ENTIERS_INT[i]) > 0);
}
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(ENTIERS_INT[i].compareTo(new Entier(INT_VALIDES[i])) == 0);
}
}
/**
* Test unitaire de la méthode getValeur()
*/
@SuppressWarnings("boxing")
public void testGetValeur() {
final Integer[] ATTENDUS = {
MIN_VALUE,
MAX_VALUE,
1,
-4587,
-569,
-3,
0,
2,
78,
781,
179892,
};
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(ENTIERS_INT[i].getValeur().compareTo(ATTENDUS[i]) == 0);
}
}
/**
* Test unitaire de la méthode somme()
*/
public void testSomme() {
final Entier[] ATTENDUS = {
new Entier(MIN_VALUE + MIN_VALUE),
new Entier(MAX_VALUE + MAX_VALUE),
new Entier(1 + 1),
new Entier(-9174),
new Entier(-1138),
new Entier(-6),
new Entier(0),
new Entier(4),
new Entier(156),
new Entier(1562),
new Entier(359784),
};
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(somme(ENTIERS_INT[i], ENTIERS_INT[i])
.compareTo(ATTENDUS[i]) == 0);
}
}
/**
* Test unitaire de la méthode soustrait()
*/
public void testSoustrait() {
Entier zero = new Entier(0);
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(soustrait(ENTIERS_INT[i], ENTIERS_INT[i])
.compareTo(zero) == 0);
}
}
/**
* Test unitaire de la méthode multiplie()
*/
public void testMultiplie() {
final Entier[] ATTENDUS = {
new Entier(MIN_VALUE * MIN_VALUE),
new Entier(MAX_VALUE * MAX_VALUE),
new Entier(1 * 1),
new Entier(-4587 * (-4587)),
new Entier(-569 * (-569)),
new Entier(-3 * (-3)),
new Entier(0 * 0),
new Entier(2 * 2),
new Entier(78 * 78),
new Entier(781 * 781),
new Entier(179892 * 179892),
};
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(multiplie(ENTIERS_INT[i], ENTIERS_INT[i])
.compareTo(ATTENDUS[i]) == 0);
}
}
/**
* Test unitaire de la méthode quotient()
*/
public void testQuotient() {
final Entier DIVISEUR = new Entier(2);
final Entier[] ATTENDUS = {
new Entier(-1073741824),
new Entier(1073741823),
new Entier(0),
new Entier(-2293),
new Entier(-284),
new Entier(-1),
new Entier(0),
new Entier(1),
new Entier(39),
new Entier(390),
new Entier(89946)
};
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(quotient(ENTIERS_INT[i], DIVISEUR)
.compareTo(ATTENDUS[i]) == 0);
}
}
/**
* Test unitaire de la méthode quotient()
*/
public void testQuotientParZero() {
final Entier DIVISEUR = new Entier(0);
for (int i = 0; i < ENTIERS_INT.length; i++) {
try {
quotient(ENTIERS_INT[i], DIVISEUR);
echec();
} catch (ExecutionException lancee) {
// Test OK
}
}
}
/**
* Test unitaire de la méthode quotient()
*/
public void testReste() {
final Entier DIVISEUR = new Entier(2);
final Entier[] ATTENDUS = {
new Entier(0),
new Entier(1),
new Entier(1),
new Entier(-1),
new Entier(-1),
new Entier(-1),
new Entier(0),
new Entier(0),
new Entier(0),
new Entier(1),
new Entier(0)
};
for (int i = 0; i < ENTIERS_INT.length; i++) {
assertTrue(reste(ENTIERS_INT[i], DIVISEUR)
.compareTo(ATTENDUS[i]) == 0);
}
}
/**
* Test unitaire de la méthode quotient()
*/
public void testResteParZero() {
final Entier DIVISEUR = new Entier(0);
for (int i = 0; i < ENTIERS_INT.length; i++) {
try {
reste(ENTIERS_INT[i], DIVISEUR);
echec();
} catch (ExecutionException lancee) {
// Test OK
}
}
}
}