Метод 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])
. -
Аналогично, два набора считаются почти равными, если их можно преобразовать в почти равные списки (путем назначения порядка каждому набору).
-
Аналогично, два словаря считаются почти равными, если набор ключей каждого словаря почти равен набору ключей другого словаря, и для каждой такой почти равной пары ключей существует соответствующее почти равное значение.
-
В целом: я считаю, что две коллекции почти равны, если они равны, за исключением некоторых соответствующих поплавков, которые почти равны друг другу. Другими словами, я хотел бы действительно сравнивать объекты, но с низкой (настраиваемой) точностью при сравнении поплавков на этом пути.