Un diff n'est pas une comparaison ligne à ligne. S'il l'était, insérer une ligne au début décalerait tout le reste et les deux versions paraîtraient entièrement différentes. L'outil cherche la plus longue sous-suite commune, et ce qui n'en fait pas partie constitue les suppressions d'un côté et les additions de l'autre.
Les deux versions
Avant :
def remise(prix, taux):
reduction = prix * taux
return prix - reduction
Après :
def remise(prix, taux):
if taux > 1:
raise ValueError(taux)
reduction = prix * taux
return round(prix - reduction, 2)
Objectif
Compter, dans le diff que produirait cet outil, les lignes ajoutées, les lignes supprimées et les lignes de contexte, puis donner la longueur de la plus longue sous-suite commune aux deux versions.
Pièges
La dernière ligne a changé : elle n'appartient donc pas à la partie commune, et compte des deux côtés à la fois.