"Почти равный" в жасмине
История:
В встроенной структуре unittest
Python существует утверждение "приблизительное равенство", реализованное с помощью метода assertAlmostEqual()
:
x = 0.1234567890
y = 0.1234567891
self.assertAlmostEqual(x, y)
У кого есть число десятичных знаков, чтобы проверить конфигурацию.
И есть numpy.testing.assert_almost_equal()
, который также работает для массивов поплавков:
import numpy.testing as npt
import numpy as np
npt.assert_almost_equal(np.array([1.0,2.3333333333333]), np.array([1.0,2.33333334]))
Вопрос:
Как сделать "почти равное" утверждение в JavaScript/Jasmine для float и массива float?
Ответы
Ответ 1
Для одного поплавка используйте toBeCloseTo
:
expect(x).toBeCloseTo(y, 7)
Для массива с плавающей точкой кажется, что лучше всего сделать это, перейдя по нему и вызовите toBeCloseTo
для каждой пары элементов (или напишите свой собственный матчи). Смотрите Ожидайте, что массив чисел с плавающей точкой будет близок к другому массиву в Jasmine.
Ответ 2
Вы можете добавить собственный тестер соответствия для типа float. Он будет вызываться на одном плавании и на каждом поплавке, присутствующем в массиве:
beforeEach(function () {
jasmine.addCustomEqualityTester(function floatEquality(a, b) {
if (a === +a && b === +b && (a !== (a|0) || b !== (b|0))) { // if float
return Math.abs(a - b) < 5e-8;
}
});
});
it("Should compare array of floats", function() {
expect([0.1234567890]).toEqual([0.1234567891]); // OK
expect([0.12345]).toEqual([0.12346]); // FAIL
});