Подтвердить что ты не робот

"Почти равный" в жасмине

История:

В встроенной структуре 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?

4b9b3361

Ответ 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
});