非常に大きな浮動小数点数と非常に小さな浮動小数点数の両方で機能するコードを書いています (たとえば、1e-150 が有効な答えになる可能性があります)。これを単体テストするには、浮動小数点数を小数点以下の桁数ではなく有効数字の数と比較したいので、次のようにします。
import unittest as ut
from numpy.testing import assert_approx_equal
class newTestCase(ut.TestCase):
"""Extends the basic unittest TestCase."""
def assertSFAlmostEqual(self, a, b, places=7):
"""Uses numpy to test if two floats are the same but to a defined
number of significant figures rather than decimal places.
Args:
a: float to be compared
b: float to be compared
places: number of significant figures to match. unittest default
for assertAlmostEqual is 7, so 7 is the default here
"""
if isinstance(a, float) != True or isinstance(b, float) != True:
raise TypeError
raised = False
try:
assert_approx_equal(a, b, significant=places)
except:
raised = True
self.assertFalse(raised, "FLoats %g and %g are not equal to %i "
"significant figures" % (a, b, places))
これはうまくいくように見えますが、これを多くの場所で使用することを計画しているので、実際に正しく動作することを確認したいと思います. 私の質問は、これを最も賢明に行うにはどうすればよいですか? 単体テストを単体テストするための適切なメカニズムはありますか?
ここで答えになりそうなものを見つけました、
しかし、これがどのように機能するのかわかりません。
よろしくお願いします!