"几乎相等"在茉莉花

时间:2016-07-21 16:39:14

标签: javascript python unit-testing testing jasmine

故事:

在Python内置unittest框架中,有一个"近似相等"断言通过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 中的断言

2 个答案:

答案 0 :(得分:15)

对于单个浮动,请使用toBeCloseTo

expect(x).toBeCloseTo(y, 7)

对于一个float数组,你可以做的最好就是遍历它并为每对元素调用toBeCloseTo(或编写你自己的匹配器)。请参阅Expect an array of float numbers to be close to another array in Jasmine

答案 1 :(得分:5)

您可以为float类型添加自定义相等性测试程序。它将在单个float和数组中的每个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
});