2016-07-21 20 views
13

Câu chuyện:"Hầu như Equal" trong Jasmine

Trong Python được xây dựng-in unittest khuôn khổ, có một sự khẳng định "xấp xỉ bình đẳng" thực hiện thông qua assertAlmostEqual() phương pháp:

x = 0.1234567890 
y = 0.1234567891 
self.assertAlmostEqual(x, y) 

nào có số số thập phân để kiểm tra cấu hình.

Và, có một numpy.testing.assert_almost_equal() mà cũng làm việc cho các mảng phao:

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])) 

Các Câu hỏi:

Làm thế nào để thực hiện một "gần như bằng" sự khẳng định trong JavaScript/Jasmine cho phao nổi và mảng nổi?

+0

Có điều gì đó thiếu sót về javascript mà thuật toán được mô tả trong tài liệu python không hoạt động? 'Kiểm tra đầu tiên và thứ hai là xấp xỉ (hoặc không xấp xỉ) bằng cách tính toán sự khác biệt, làm tròn đến số chữ số thập phân đã cho (mặc định 7) và so sánh với số không. Lưu ý rằng các phương thức này làm tròn các giá trị đến số chữ số thập phân đã cho (ví dụ như hàm round()) và không phải là chữ số có nghĩa. Nếu delta được cung cấp thay vì địa điểm thì sự khác biệt giữa đầu tiên và thứ hai phải nhỏ hơn hoặc bằng (hoặc lớn hơn) delta.' – dm03514

+0

@ dm03514 yup, thuật toán chính nó là chính xác những gì tôi đang làm. Tìm kiếm nếu có một cái gì đó được xây dựng trong hoặc cách tốt nhất để giải quyết nó với javascipt/hoa nhài. Cảm ơn. – alecxe

+0

Bạn có biết cách so sánh các số dấu chấm động cho "gần như" bình đẳng không? Nó khá nhiều tiêu chuẩn như thế nào nó thường được thực hiện. Lấy sự khác biệt của các con số được so sánh và kiểm tra nó là rất rất nhỏ (ít hơn một số epsilon). –

Trả lời

4

Bạn có thể thêm trình kiểm tra bình đẳng tùy chỉnh cho loại phao. Nó sẽ được gọi trên một phao đơn và trên mỗi phao có trong một mảng:

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 
}); 
Các vấn đề liên quan