En assertAlmostEqual(x, y) méthode dans Le cadre de tests unitaires de Python vérifie si x
et y
sont approximativement égaux en supposant qu'il s'agit de flottants.
Le problème avec assertAlmostEqual()
est qu'il ne fonctionne que sur les flottants. Je cherche une méthode comme assertAlmostEqual()
qui fonctionne sur des listes de flottants, des ensembles de flottants, des dictionnaires de flottants, des tuples de flottants, des listes de tuples de flottants, des ensembles de listes de flottants, etc.
Par exemple, laissez x = 0.1234567890
, y = 0.1234567891
. x
et y
sont presque égaux car ils sont d'accord sur chaque chiffre, sauf le dernier. Par conséquent, self.assertAlmostEqual(x, y)
est True
parce que assertAlmostEqual()
fonctionne pour les flotteurs.
Je cherche une solution plus générique assertAlmostEquals()
qui évalue également les appels suivants à True
:
-
self.assertAlmostEqual_generic([x, x, x], [y, y, y])
. -
self.assertAlmostEqual_generic({1: x, 2: x, 3: x}, {1: y, 2: y, 3: y})
. -
self.assertAlmostEqual_generic([(x,x)], [(y,y)])
.
Existe-t-il une telle méthode ou dois-je la mettre en œuvre moi-même ?
Clarifications :
-
assertAlmostEquals()
a un paramètre optionnel nomméplaces
et les nombres sont comparés en calculant la différence arrondie au nombre de décimales.places
. Par défautplaces=7
et doncself.assertAlmostEqual(0.5, 0.4)
est Faux alors queself.assertAlmostEqual(0.12345678, 0.12345679)
est vrai. Ma spéculationassertAlmostEqual_generic()
devrait avoir la même fonctionnalité. -
Deux listes sont considérées comme presque égales si elles ont des nombres presque égaux dans exactement le même ordre. formellement,
for i in range(n): self.assertAlmostEqual(list1[i], list2[i])
. -
De même, deux ensembles sont considérés comme presque égaux s'ils peuvent être convertis en listes presque égales (en attribuant un ordre à chaque ensemble).
-
De même, deux dictionnaires sont considérés comme presque égaux si l'ensemble de clés de chaque dictionnaire est presque égal à l'ensemble de clés de l'autre dictionnaire, et pour chaque paire de clés presque égale, il existe une valeur presque égale correspondante.
-
En général : Je considère deux collections presque égales si elles sont égales à l'exception de quelques flottants correspondants qui sont juste presque égaux entre eux. En d'autres termes, je voudrais vraiment comparer des objets mais avec une faible précision (personnalisée) lors de la comparaison des flottants en cours de route.