7
votes

Tester des assertions pour des tuples avec des flotteurs

J'ai une fonction qui retourne un tuple qui, entre autres, contient une valeur de flotteur. Habituellement, j'utilise assertalement égals pour comparer ceux-ci, mais cela ne fonctionne pas avec des tuples. En outre, le tuple contient également d'autres types de données. Actuellement, je affie de tous les éléments du tuple individuellement, mais cela devient trop pour une liste de tels tuples. Y a-t-il un bon moyen d'écrire des assertions pour de tels cas? Considérons cette fonction: xxx

maintenant, je veux écrire un test pour cela: xxx

Cela échouera car le résultat de 1.0 / 2 n'est pas exactement 0.5 . Quelqu'un peut-il recommander une bonne façon d'écrire une telle affirmation de manière lisible?

EDIT : réellement 1.0 / 2 est exactement 0.5 < / code>, mais vous avez mon sens.


2 commentaires

En fait, 0,5 est exactement représentable pour double .


Je suis juste compris cela aussi - mais vous obtenez le point général que j'espère.


3 Réponses :


2
votes

Ce que j'ai fait dans le passé consiste à écrire une fonction personnalisée qui établit une validité pour un type de données complexe, puis utilisé assert (isfoovovalid (foo)) . La fonction de validité peut simplement retourner vrai / faux, mais il est généralement préférable d'augmenter AssertionError avec un message approprié.


0 commentaires

3
votes

Je définirai probablement une fonction récursive. xxx

(Notez qu'il affirmera (1, 2) et [1, 2] sont égaux.)


0 commentaires

8
votes

Eh bien, comment diriez-vous de votre fonction avec quelques zips:

def testF(self):
    for tuple1, tuple2 in zip(f(range(1,3)), [(1.0, 2), (0.5, 4)]):
        for val1, val2 in zip(tuple1, tuple2):
            if type(val2) is float:
                self.assertAlmostEquals(val1, val2, 5)
            else:
                self.assertEquals(val1, val2)


0 commentaires