Метод assertAlmostEqual (x, y) в инфраструктуре модульного тестирования Python проверяет, x и y приблизительно равны при условии, что они являются поплавками.
Проблема с assertAlmostEqual() заключается в том, что она работает только с поплавками. Я ищу метод типа assertAlmostEqual(), который работает с списками поплавков, множеств поплавков, словарей поплавков, кортежей поплавков, списков кортежей поплавков, наборов списков поплавков и т.д.
Например, пусть x = 0.1234567890, y = 0.1234567891. x и y почти равны, поскольку они согласуются с каждой цифрой, за исключением последней. Поэтому self.assertAlmostEqual(x, y) является True, потому что assertAlmostEqual() работает для поплавков.
Я ищу более общий assertAlmostEquals(), который также оценивает следующие вызовы 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)]).
Есть ли такой метод или я должен сам его реализовать?
Разъяснения:
-
assertAlmostEquals()имеет необязательный параметр с именемplaces, а числа сравниваются путем вычисления разности, округленной до числа десятичныхplaces. По умолчаниюplaces=7, поэтомуself.assertAlmostEqual(0.5, 0.4)является False, аself.assertAlmostEqual(0.12345678, 0.12345679)- True. Мое умозрительноеassertAlmostEqual_generic()должно иметь одинаковую функциональность. -
Два списка считаются почти равными, если они имеют почти равные числа в точно таком же порядке. формально,
for i in range(n): self.assertAlmostEqual(list1[i], list2[i]). -
Аналогично, два набора считаются почти равными, если их можно преобразовать в почти равные списки (путем назначения порядка каждому набору).
-
Аналогично, два словаря считаются почти равными, если набор ключей каждого словаря почти равен набору ключей другого словаря, и для каждой такой почти равной пары ключей существует соответствующее почти равное значение.
-
В целом: я считаю, что две коллекции почти равны, если они равны, за исключением некоторых соответствующих поплавков, которые почти равны друг другу. Другими словами, я хотел бы действительно сравнивать объекты, но с низкой (настраиваемой) точностью при сравнении поплавков на этом пути.