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
19 lines
724 B
JavaScript
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;
|
|
}
|