ajout crypto

This commit is contained in:
2025-03-31 10:06:09 +02:00
parent 731020a934
commit bff1a74ae7
680 changed files with 14849 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
import static org.junit.Assert.assertTrue;
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 utilise des String comme type paramétré.
*/
public class TestSimpleDeque {
/**
* On ne peut pas ajouter avec addFirst l'élément null
* [0.5 point]
*/
@Test(expected = NullPointerException.class)
public void addFirstNull() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addFirst(null); // Doit lancer une exception
}
/**
* On ne peut pas ajouter avec addLast l'élément null
* [0.5 point]
*/
@Test(expected = NullPointerException.class)
public void addLastNull() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addLast(null); // Doit lancer une exception
}
/**
* Un deque sans élément est vide.
* [0.5 point]
*/
@Test
public void addNoneIsEmpty() {
MinimalDeque<String> d = new SimpleDeque<>();
assertTrue(d.isEmpty());
}
/**
* Un deque avec 1 élément n'est pas vide.
* [0.5 point]
*/
@Test
public void addOneIsNotEmpty() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addFirst("test");
assertFalse(d.isEmpty());
}
/**
* Ajouter devant et enlever à la fin respecte l'ordre.
* [1 point]
*/
@Test
public void pasDeResquilleur() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addFirst("meu");
d.addFirst("zo");
d.addFirst("bu");
d.addFirst("ga");
assertSame("ga", d.removeLast());
assertSame("bu", d.removeLast());
assertSame("zo", d.removeLast());
assertSame("meu", d.removeLast());
}
/**
* Ajouter derrière et enlever au début respecte l'ordre.
* [1 point]
*/
@Test
public void pasDeResquilleurQuantique() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addLast("ga");
d.addLast("bu");
d.addLast("zo");
d.addLast("meu");
assertSame("ga", d.removeFirst());
assertSame("bu", d.removeFirst());
assertSame("zo", d.removeFirst());
assertSame("meu", d.removeFirst());
}
/**
* On ne peut pas enlever devant un deque vide.
* [1 point]
*/
@Test(expected = NoSuchElementException.class)
public void removeFirstFromEmpty() {
MinimalDeque<String> d = new SimpleDeque<>();
d.removeFirst();
}
/**
* On ne peut pas enlever derrière un deque vide.
* [1 point]
*/
@Test(expected = NoSuchElementException.class)
public void removeLastFromEmpty() {
MinimalDeque<String> d = new SimpleDeque<>();
d.removeLast();
}
/**
* Ajouter et enlever un seul élément dans les deux sens donne le même résultat.
* [2 point]
*/
@Test
public void mangerLaBananeParLesDeuxBouts() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addFirst("ga");
assertSame("ga", d.removeFirst());
d.addLast("ga");
assertSame("ga", d.removeLast());
}
/**
* Invariant de taille
* [4 point]
*/
@Test
public void invariantTaille() {
MinimalDeque<String> d = new SimpleDeque<>();
String[] elements = {"ga", "bu", "zo", "meu"};
Random random = new Random();
int N = random.nextInt(901) + 100;
for (int i = 0; i < N; i++) {
if (random.nextBoolean()) {
d.addFirst(elements[random.nextInt(elements.length)]);
} else {
d.addLast(elements[random.nextInt(elements.length)]);
}
}
for (int i = 0; i < N; i++) {
if (random.nextBoolean()) {
d.removeFirst();
} else {
d.removeLast();
}
}
assertTrue(d.isEmpty());
}
}

View File

@@ -0,0 +1,151 @@
export CLASSPATH=".:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar:$CLASSPATH"
assertThows
assertTrue
assertFalse
assertEquals
assertNotEquals
Voici une réponse détaillée pour chaque question et une explication de ce qu'il faut compléter :
1) [3 points en tout]
a) Quel patron de conception est à l'œuvre ici ?
Réponse :
Le patron de conception utilisé est l'adaptateur (Adapter Pattern). Cette classe agit comme une enveloppe autour d'une implémentation existante de Deque (comme celle dans java.util) pour qu'elle corresponde à l'interface MinimalDeque demandée.
b) Comment fonctionne cette classe ?
Réponse :
La classe SimpleDequeThatsNotCricket délègue toutes ses opérations directement à une instance interne de Deque fournie par java.util. Elle ne réimplémente pas les fonctionnalités mais agit comme une passerelle pour adapter une implémentation existante à une interface spécifique.
2) [-6 à 4 points en tout]
a)
a1) Il est possible de décider si un programme Java va sarrêter quelle que soit son entrée.
Réponse : F (C'est le problème de l'arrêt, qui est indécidable).
a2) Il est possible de décider si un programme C va sarrêter quelle que soit son entrée.
Réponse : F (Même raison que pour Java).
a3) Il est possible de décider si un programme Python ne va pas sarrêter pour certaines entrées.
Réponse : F (Le problème de l'arrêt est indécidable pour tous les langages Turing-complets).
b)
b1) Il est possible de décrire les propriétés souhaitées d'un programme en utilisant des langages de spécifications inspirés de la logique du premier ordre.
Réponse : V
b2) Il existe des logiciels qui, étant donné une spécification et un programme, peuvent décider à coup sûr que le programme satisfait la spécification ou pas.
Réponse : F (C'est une généralisation trop forte, en raison des limitations de la vérification formelle).
b3) Il existe des logiciels qui, étant donné une spécification et un programme, peuvent décider si le programme satisfait la spécification ou pas en demandant à un logiciel d'IA générative (comme ChatGPT) pour générer une preuve.
Réponse : F (Bien que l'IA puisse assister, elle ne garantit pas une vérification formelle).
3) [1 point en tout]
a) Commande pour lancer les tests si junit.jar et hamcrest-core.jar sont dans le même répertoire :
bash
Copier le code
javac -cp .:junit.jar:hamcrest-core.jar TestSimpleDeque.java
java -cp .:junit.jar:hamcrest-core.jar org.junit.runner.JUnitCore TestSimpleDeque
b) Commande pour lancer les tests si les archives sont dans le CLASSPATH :
bash
Copier le code
javac TestSimpleDeque.java
java org.junit.runner.JUnitCore TestSimpleDeque
4) [12 points en tout]
Complétez le fichier TestSimpleDeque.java en fonction des descriptions des tests.
Test addFirstNull:
Ajoutez une assertion pour vérifier qu'une exception est levée. Exemple :
java
Copier le code
@Test(expected = NullPointerException.class)
public void addFirstNull() {
MinimalDeque<String> d = new SimpleDeque<>();
d.addFirst(null);
}
Test addLastNull:
Pareil que pour addFirstNull.
Test addNoneIsEmpty:
Vérifiez qu'un Deque vide est effectivement vide. Exemple :
java
Copier le code
@Test
public void addNoneIsEmpty() {
MinimalDeque<String> d = new SimpleDeque<>();
assertTrue(d.isEmpty());
}
Test addOneIsNotEmpty:
Vérifiez qu'un Deque avec un élément n'est pas vide.
Test pasDeResquilleur:
Ajoutez des éléments devant, enlevez-les derrière, et vérifiez l'ordre.
Test pasDeResquilleurQuantique:
Ajoutez des éléments derrière, enlevez-les devant, et vérifiez l'ordre.
Test removeFirstFromEmpty:
Vérifiez qu'une exception est levée lorsqu'on essaie de retirer un élément d'un Deque vide.
Test removeLastFromEmpty:
Même logique que removeFirstFromEmpty.
Test mangerLaBananeParLesDeuxBouts:
Ajoutez un élément, enlevez-le des deux côtés, et vérifiez.
Test invariantTaille:
Implémentez le test aléatoire avec ajout/suppression jusqu'à ce que le Deque soit vide.
Chain of Responsibility
But : Permet à plusieurs objets de traiter une requête, chaque objet ayant la possibilité de la traiter ou de la transmettre.
Exemple : Système de support technique avec plusieurs niveaux d'escalade.
Command
But : Encapsule une requête en un objet pour paramétrer des actions, les annuler ou les enregistrer.
Exemple : Boutons Annuler/Refaire dans un éditeur de texte.
Interpreter
But : Fournit une représentation grammaticale d'un langage et un interprète pour traiter ses instructions.
Exemple : Interprétation de scripts dans un moteur de jeu.
Iterator
But : Fournit un moyen d'accéder séquentiellement aux éléments d'une collection sans exposer sa représentation.
Exemple : Parcours des éléments d'une liste.
Mediator
But : Définit un objet pour centraliser la communication entre plusieurs objets.
Exemple : Gestionnaire de chat dans une application de messagerie.
Memento
But : Capture l'état interne d'un objet pour pouvoir le restaurer ultérieurement.
Exemple : Sauvegarde dans un jeu vidéo.
Observer
But : Définit une relation 1-n où les objets sont notifiés automatiquement lorsqu'un autre objet change d'état.
Exemple : Notifications pour les abonnés dans un système de messagerie.
State
But : Permet à un objet de changer son comportement lorsqu'il change d'état.
Exemple : Système de verrouillage/déverrouillage dans une application.
Strategy
But : Définit une famille d'algorithmes, les encapsule, et permet de les interchanger dynamiquement.
Exemple : Algorithmes de tri dans une application.
Template Method
But : Définit la structure d'un algorithme tout en laissant certaines étapes spécifiques aux sous-classes.
Exemple : Méthode de rendu dans un moteur de jeu.
Visitor
But : Sépare un algorithme de la structure des objets sur lesquels il opère.
Exemple : Calcul de taxes dans un système de commerce électronique.
java org.junit.runner.JUnitCore TestSimpleDeque
javac -cp .:junit.jar:hamcrest-core.jar TestSimpleDeque.java
java -cp .:junit.jar:hamcrest-core.jar org.junit.runner.JUnitCore TestSimpleDeque
javac TestSimpleDeque.java
java org.junit.runner.JUnitCore TestSimpleDeque