gestion_table_tournante_libre/test/fixtures/mutation/calcul.js
Mathieu Benoit 8bdc959183 [ADD] mutation: run one mutant through node --test with a loader hook
A mutant counts only when the tests that import its module actually run
against the mutated source. A loader hook (module.registerHooks) serves the
mutated text in place of the module; the import graph picks the tests that
reach it, and node --test runs them in a child with a deadline. The verdict
is killed, survived, timed out or error; an empty request, a missing test
or a non-positive deadline is refused before anything starts.
Checked: red first; 3418 node and 76 long tests green from the index,
including a real run on a small invented module.

--- FR ---

[ADD] mutation : jouer un mutant sous node --test, crochet de chargement

Un mutant ne compte que si les épreuves qui importent son module jouent
vraiment contre le source muté. Un crochet de chargement
(module.registerHooks) sert le texte muté à la place du module ; le graphe
des imports choisit les épreuves qui l'atteignent, et node --test les joue
dans un enfant sous délai. Le verdict est tué, survivant, délai ou erreur ;
une demande vide, une épreuve absente ou un délai non positif sont refusés
avant tout lancement.
Vérifié : rouge d'abord ; 3418 node et 76 longues vertes depuis l'index,
dont un vrai lancement sur un petit module inventé.

Assisted-by: Claude Opus 5.5
2026-10-09 13:04:14 -04:00

19 lines
724 B
JavaScript

// © 2026 TechnoLibre (http://www.technolibre.ca)
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
// Module inventé que mute test/mutation.long.test.js : chaque fonction porte
// un site dont le mutant a une issue connue sous calcul.epreuve.js.
// La somme des entiers de 1 à n. « total += i » → « total -= i » change la
// somme ; « i++ » → « i-- » ne termine pas dès que n ≥ 1.
export function somme(n) {
let total = 0;
for (let i = 1; i <= n; i++) total += i;
return total;
}
// Le plus grand de deux nombres. « a > b » → « a >= b » rend le même nombre
// pour tout couple : un mutant équivalent, qui survit.
export function plusGrand(a, b) {
return a > b ? a : b;
}