Как проверить результаты с помощью doctest? - PullRequest
14 голосов
/ 11 марта 2010

Я разрабатываю программу, которая делает некоторые вычисления с плавающей запятой. Есть ли способ проверить мои функции (которые доставляют поплавки) с doctests?

Ответы [ 5 ]

12 голосов
/ 12 марта 2010

Конечно, просто отформатируйте плавающие в разумном формате, исходя из ваших знаний о точности, которую вы ожидаете от них - например, если вы ожидаете точность до 2 цифр после десятичной точки, вы можете использовать:

''' Rest of your docstring and then...

    >>> '%.2f' % funcreturningfloat()
    '123.45'

'''
9 голосов
/ 01 июля 2013

Следующие работы для носа:

>>> 1/3.  # doctest: +ELLIPSIS
0.333...
9 голосов
/ 12 марта 2010

В документации есть предложение

Числа с плавающей точкой также подвержены небольшим изменениям производительности через платформы, потому что Python откладывает на платформу C библиотеки для форматирование с плавающей точкой, и C библиотеки варьируются широко по качеству здесь.

>>> 1./7  # risky
0.14285714285714285
>>> print 1./7 # safer
0.142857142857
>>> print round(1./7, 6) # much safer
0.142857
0 голосов
/ 28 ноября 2014

Вы можете использовать numtest - расширение doctest, которое упрощает проверку числовых результатов. https://pypi.python.org/pypi/numtest

>>> 1.0/3
0.333

Неудачный пример: 1.0 / 3 Ожидаемое: 0,333 Получил: 0,3333333333333333

>>> 1.0/3 # doctest: +NUMBER
0.333

import doctest
import numtest
doctest.testmod()

Процесс завершен с кодом выхода 0

Все тесты пройдены. Нет необходимости форматировать строки в ваших тестах.

0 голосов
/ 08 марта 2011

Формат строки позволяет использовать тестовые наборы.

>>> funcreturningfloattuple(1.0)
(1.0, 1.0)
>>> '%.2f, %.2f' % funcreturningfloattuple(1.0)
'1.00, 1.00'

>>> funcreturningfloattuple(1.4)
(1.3999999999999999, 1.3999999999999999)
>>> '%.2f, %.2f' % funcreturningfloattuple(1.4)
'1.40, 1.40'
...