mini-projet REPLatrice
| Champ | Valeur |
|---|---|
| Auteur·e | Élise C. Philippe |
| Édition | 2025-08-25 |
| Échéance | TBA |
| Taille des équipes | 2 personnes login des auteur·rice·s dans author.txt |
| Rendu | dépôt $YEAR_wap_replatrice |
Barème
- utilisation d’arrow functions 3
- table de décision 3
- utilisation de
.map(),.reduce(),.filter(),.splice()quand c’est applicable (autrement dit pas de boucle si ça n’est pas nécessaire) 3 - implémentation des commandes 15 commandes 5 points
- écriture des tests unitaires 3
- qualité du code, facilité de lecture 3
Consignes
REPL + calculatrice
Vous devez écrire un programme en NodeJS qui se comporte comme un interprète de commandes (lecture d’une ligne sur l’entrée standard, analyse grammaticale de la commande, exécution de la logique, affichage du résultat.)
Votre interprète va travailler autour d’une liste de nombres et effectuer des modification et des calculs dessus.
Les commandes que vous devez gérer sont :
push NUMBERajoute un nombre à la fin de la liste ;pop [IDX]retire le nombre à la positionIDXsi elle est donnée, sinon à la fin ;rotate_leftdéplace tous les nombres vers le début du tableau et fait passer le premier nombre à la fin du tableau ;rotate_rightidem, dans l’autre sens ;sum [START] [END]fait la somme et affiche le résultat siSTARTest spécifié, ne faire la somme qu’à partir de l’indexSTART, siENDest spécifié, s’arrêter à l’indexEND;sum_inplace [START] [END]fait la somme et remplace les nombres additionnés par le résultat ;median [START] [END]fait la médiane et affiche le résultat ;median_inplace [START] [END]fait la médiane et remplace les nombres utilisés pour le calcul par le résultat ;avg [START] [END]fait la moyenne et affiche le résultat ;avg_inplace [START] [END]fait la moyenne et remplace les nombres utilisés pour le calcul par le résultat ;clear greater VALUEsupprime du tableau tous les éléments plus grands queVALUE;clear lesser VALUEsupprime du tableau tous les éléments plus petits queVALUE;clearvide le tableau ;save REGISTER_NAMEsauvegarde une copie tableau avec le nom donné ;restore REGISTER_NAMEcharge la copie sauvegardée du tableau.
Tests unitaires
Vous devez écrire les tests unitaires de votre projet en utilisant les module node:test et node:assert/strict. Ils vous permettent d’écrire des tests qui ressemblent à ceci :
// file: test/math.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
import { add, divide } from '../src/math.js';
test('add works', () => {
assert.strictEqual(add(2, 3), 5);
assert.strictEqual(add(-1, 1), 0);
});
test('divide throws on zero', () => {
assert.throws(() => divide(1, 0), {
message: 'divide by zero'
});
});
Qui s’exécutent avec node --test.
Lors de l’implémentation de votre projet, réfléchissez à comment vous pouvez découper votre travail en fonctions afin de pouvoir les tester.
Vous pouvez aussi utiliser les tests pour étudier le comportement de quelque chose que vous ne comprenez pas.
Bonus
- sauvegarde dans un fichier en terminant le nom du registre par
.json(+ restauration) - historique des commandes accessible avec
history, rappel de la dernière commande en faisant!!.