Appliquer la notion
Voici une fonction qui trie dans l'ordre croissant la liste qui lui est passée en paramètre :
function bubbleSort (unsortedList) {
const intList = unsortedList.slice()
for (let i = intList.length - 1; i > 0; i--) {
for (let j = 0; j < i; j++) {
if (intList[j + 1] < intList[j]) {
// Echanger les deux valeurs
const temp = intList[j + 1]
intList[j + 1] = intList[j]
intList[j] = temp
}
}
}
return intList
}
Question
Écrire une fonction testBubbleSort
qui teste le résultat de la fonction pour [3,2,1], [1,2,3], [1,3,2].
Cette fonction doit afficher une erreur si le résultat attendu ne correspond pas au résultat renvoyé.
Indice
Il est possible de comparer deux tableaux « a »
et « b »
, en prenant l'ordre en compte, avec le test :
a.toString() !== b.toString()
Solution
function testBubbleSort () {
if (bubbleSort([3, 2, 1]).toString() !== [1, 2, 3].toString()) {
console.log('Test échoué pour [3, 2, 1]')
return false
}
if (bubbleSort([1, 2, 3]).toString() !== [1, 2, 3].toString()) {
console.log('Test échoué pour [1, 2, 3]')
return false
}
if (bubbleSort([1, 3, 2]).toString() !== [1, 2, 3].toString()) {
console.log('Test échoué pour [1, 3, 2]')
return false
}
console.log('Test réussi')
return true
}
testBubbleSort()
Question
Quel test de valeur extrême faudrait-il rajouter pour s'assurer que la fonction est correcte ?
Ajouter ce test.
Indice
Les valeurs extrêmes sont en général des limites. Pour un entier positif, on testerait le comportement si la valeur d'entrée vaut 0.
Solution
Il serait pertinent d'ajouter un test pour un tableau vide : []
if (bubbleSort([]).toString() !== [].toString()) {
console.log('Test échoué pour []')
return false
}
Complément :
Les tests fonctionnent. Mais en revanche, pour être vraiment exhaustifs, il faudrait aussi tester des valeurs aberrantes : envoyer un nombre, une valeur undefined
, etc.
Avec le code actuel, la fonction renverra une erreur. Cette erreur doit être maîtrisée, et il faut le vérifier.