Skip to content
Snippets Groups Projects
Commit f1229f5b authored by Mathieu Barberot's avatar Mathieu Barberot
Browse files

feat(debugging): setup exercises with Fibonacci sequence

parent ed7615d9
Branches main
No related merge requests found
package iut.fibonacci;
public class Fibonacci {
public static int iterativeFibonacci(int n) {
if(n == 0 || n == 1) {
return n;
}
int n0 = 0;
int n1 = 1;
int tempNthTerm;
for (int i = 2; i <= n; i++) {
tempNthTerm = n0 + n1;
n0 = n1;
n1 = tempNthTerm;
}
return n1;
}
public static int recursiveFibonacci(int n) {
if (n == 1 || n == 0) {
return n;
}
int firstPreviousTerm = recursiveFibonacci(n - 1);
int secondPreviousTerm = recursiveFibonacci(n - 2);
return firstPreviousTerm + secondPreviousTerm;
}
public static int binetFibonacci(int n) {
double squareRootOf5 = Math.sqrt(5);
double phi = (1 + squareRootOf5)/2;
int nthTerm = (int) ((Math.pow(phi, n) - Math.pow(-phi, -n))/squareRootOf5);
return nthTerm;
}
}
package iut.fibonacci;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class FibonacciTest {
@Test
void firstSteps() {
// Act
int i = Fibonacci.iterativeFibonacci(5);
// Assert
assertThat(i).isEqualTo(5);
}
@Test
void exploreCallStack() {
// Act
int i = Fibonacci.recursiveFibonacci(5);
// Assert
assertThat(i).isEqualTo(5);
}
@Test
void longExecutionTest() {
// Act
int i = Fibonacci.recursiveFibonacci(45);
// Assert
assertThat(i).isEqualTo(5);
}
}
\ No newline at end of file
== Consignes
Les exercices portent sur la classe `PrimeFactor` du programme "Prime Factor" footnote:[`exercices-java/src/main/java/iut/prime/factor`]
Les exercices portent sur la classe `Fibonacci` footnote:[`exercices-java/src/main/java/iut/fibonacci`]
== Exercice 1 : découverte
=== 1.a : lancer le debugger
* Poser un breakpoint à la ligne X
* Démarrer en mode debug
* Atteindre le breakpoint
* Dérouler l'algorithme jusqu'à trouver la valeur de la variable ``
* Poser un breakpoint à la ligne 5
* Lancer le test `firstSteps` en mode debug
* Dérouler l'algorithme en pas à pas (F8)
=== 1.b : remonter la pile d'exécution
* Poser un breakpoint à la ligne X
* Démarrer en mode debug
* Atteindre le breakpoint
* Dérouler l'algorithme jusqu'à trouver la valeur de la variable ``
* Poser un breakpoint à la ligne 27
* Lancer le test `exploreCallStack` en mode debug
* Inspecter la pile d'exécution
* Cliquer sur les appels précédents et inspecter les valeurs
=== 1.c : utiliser un watcher
* Poser un breakpoint à la ligne X
* Démarrer en mode debug
* Atteindre le breakpoint
* Ajouter un watcher pour évaluer la formule suivante : ``
* Dérouler l'algorithme jusqu'à trouver la valeur de la variable ``
* Poser un breakpoint à la ligne 15
* Lancer le test `firstSteps` en mode debug
* Ajouter un watcher pour évaluer la formule suivante : `n0 + n1`
* Laisser la boucle avancer et s'arrêter sur le breakpoint (F9)
* Visualiser le watcher changer
=== 1.d : stopper l'exécution manuellement
* Ne pas poser de breakpoint
* Démarrer en mode debug avec les paramètres suivants : ``
* Lancer le test `longExecutionTest` en mode debug
* Appuyer sur le bouton pause
* Inspecter où en est l'algorithme
== Exercice 2 : techniques avancées
=== 2.a : le breakpoint conditionnel
* Poser un breakpoint à la ligne X
* Editer le breakpoint pour ajouter la condition suivante : ``
* Démarrer en mode débug
* Poser un breakpoint à la ligne 15
* Editer le breakpoint pour ajouter la condition suivante : `i == n`
* Lancer le test `firstSteps` en mode debug
* Constater le déclenchement du breakpoint comme attendu
=== 2.b : modifier une variable à chaud
* Poser un breakpoint à la ligne X
* Démarrer en mode debug
* Atteindre le breakpoint
* Modifier la variable X pour lui affecter la valeur ``
* Continuer l'exécution
\ No newline at end of file
* Poser un breakpoint à la ligne 15
* Lancer le test `firstSteps` en mode debug
* Modifier la variable `i` pour lui affecter la valeur `5`
* L'exécution sort de la boucle plus tôt que prévu et le test échoue
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment