Appliquer la notion

Voici une fonction qui trie dans l'ordre croissant la liste qui lui est passée en paramètre :

1
function bubbleSort (unsortedList) {
2
  const intList = unsortedList.slice()
3
  for (let i = intList.length - 1; i > 0; i--) {
4
    for (let j = 0; j < i; j++) {
5
      if (intList[j + 1] < intList[j]) {
6
        // Echanger les deux valeurs
7
        const temp = intList[j + 1]
8
        intList[j + 1] = intList[j]
9
        intList[j] = temp
10
      }
11
    }
12
  }
13
  return intList
14
}
15

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 :

1
a.toString() !== b.toString()

Solution

1
function testBubbleSort () {
2
  if (bubbleSort([3, 2, 1]).toString() !== [1, 2, 3].toString()) {
3
    console.log('Test échoué pour [3, 2, 1]')
4
    return false
5
  }
6
  if (bubbleSort([1, 2, 3]).toString() !== [1, 2, 3].toString()) {
7
    console.log('Test échoué pour [1, 2, 3]')
8
    return false
9
  }
10
  if (bubbleSort([1, 3, 2]).toString() !== [1, 2, 3].toString()) {
11
    console.log('Test échoué pour [1, 3, 2]')
12
    return false
13
  }
14
  console.log('Test réussi')
15
  return true
16
}
17
18
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 : []

1
if (bubbleSort([]).toString() !== [].toString()) {
2
  console.log('Test échoué pour []')
3
  return false
4
}
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.