Citation :J'ai justement induis que plus() devait sommer deux nombres et renvoyer leur somme
J'ai toujours pas compris pourquoi ma fonction ne faisait pas d'addition ... la spec c'est d'implémenter l'addition pour un objet de type nombre.
Citation :Et tu te dis peut-être que la preuve mettrai des mois ou des années à se faire... C'est peut-être juste un manque de pratiqueMais je t'en prie, fais une fonction qui fait une requête mySQL et prouve que l'algorithme est correct.
Citation : De toute façon, dans tous les cas, ma preuve une fois faite est terminée et enterrée, tandis qu'avec l'approche des tests, il faut de façon continue "surveiller" et corriger le système.Ce qu'il y a de bien avec l'approche des tests c'est qu'elle est conçue pour les bon développeurs, ce qui font évoluer leur code, le maintiennent, font des applis qui se vendent et dont le code est utilisé par des appels de plus en plus variés. Pas pour des mathématiciens qui sauraient apporter la preuve que chacun de leurs algos est correct puis enterreraient leur code comme tu dis.
De plus tu ne réponds que sur les test du code pour le débug, qu'as tu as dire pour le reste, ne penses-tu pas que ce sont déjà des éléments suffisants pour tester le TDD ?
Citation :Ok. Tu me payes quoi si je te prouves que quelque soit les N tests que tu feras, si jamais l'élément testé accepte au moins N+1 état d'entrée, alors l'élément peut être buggé et le besoin insatisfait?
je te paierai rien mais je serai très impressioné Voici une fonction qui calcule la longueur d'une liste. (x:xs) signifie qu'on bind x sur le premier élément de la liste et xs sur le reste de la liste.
Code :
len :: [a] -> Int
len [] = 0
len (x:xs) = 1 + (len xs)
comme test, je propose simplement :
Code :
assert ((len []) == 0)
assert ((len [[]]) == 1)
si tu match (x:xs) sur [1], x vaut 1 et xs vaut []