[RFC]: Migrate `math/base/special` packages from relative tolerance testing to ULP difference testing (tracking issue)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Tái cấu trúc
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- javascript
- Lĩnh vực
- testing-qa
Hướng nghiên cứu
Bắt đầu bằng cách nghiên cứu commit 121f2c0 và tài liệu về @stdlib/assert/is-almost-same-value, sau đó tìm trong các thư mục test/ dưới math/base/special một package sử dụng các trường hợp dung sai tương đối. Di chuyển các test chỉ cho một package, giữ nguyên hành vi và sử dụng các giá trị ULP tối thiểu. Chạy make test TESTS_FILTER="./math/base/special//." và xác minh rằng tất cả các trường hợp đều đạt.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Instructions
- Read the issue description below.
- Read the issue comment which follows the description.
- Search for a package in
math/base/specialhaving relative tolerance tests which needs updating according to the description below. - Follow any additional guidance specified in this issue.
Description
This RFC proposes migrating from Relative Tolerance testing to ULP Difference testing for math/base/special functions.
In short, this RFC seeks to refactor testing from, for example
var abs = require( '@stdlib/math/base/special/abs' );
var delta = abs( y - expected[ i ] );
var tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y );
to
var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' );
t.strictEqual( isAlmostSameValue( y, expected[ i ], 1 ), true, 'returns expected value' );
The migration is demonstrated in commit 121f2c0
In particular, notice three things:
- We add the import
@stdlib/assert/is-almost-same-value. See the documentation for@stdlib/assert/is-almost-same-valuefor supported parameters. - We remove
var delta = abs( y - expected[ i ] );andvar tol = EPS * abs( expected[ i ] ); - We replace
t.ok( ... );witht.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'returns expected value' );with the returned output, expected value and the minimum required ulp value. Also, make sure the message is'returns expected value'for every test case.
By performing this refactoring, we facilitate
- Measuring error in units of the representable gap at that magnitude, which is the natural accuracy unit for floating-point.
- Enables a uniform accuracy budget
- Easier to test both real and complex functions, across single-precision and double-precision, with consistent and trustworthy rules.
Note: In certain functions, we may encounter different return values in the JavaScript and C implementation for the same implementation. In that case, refer to this commit 69e1068. This was discussed here in detail FAQ.
Steps
Given the relatively widespread practice of using relative tolerance in testing, this RFC aims to be an open call for any contributor wanting to contribute to the project to do the following:
- Study the changes made in commit 121f2c0, as this commit contains the sorts of changes that we are looking for.
- Ensure you have setup your local development environment by following the contributing guide, including
make install-node-modulesandmake init. - Study the documentation for
@stdlib/assert/is-almost-same-value. - Find a package containing relative tolerance test cases.
- Update the test cases for that package, and only that package, to migrate to use ULP difference testing. Make sure that you put the minimum required ULP value possible. Tests can be found in the
test/folder of a package (if it exists). - Run tests locally using the command
make test TESTS_FILTER=".*/math/base/special/<package-name>/.*". For example,make test TESTS_FILTER=".*/math/base/special/hyp2f1/.*". - Verify that the updated ULP values pass all the test cases.
- Commit your changes.
- Submit a PR updating the test for that package (and only that package).
- For the PR title, use the following template "test: migrate
<package-name>to ULP-based testing" where<package_name>is the name of the package you updated (e.g.,math/base/special/hyp2f1). - In the PR body/description, use the phrase "Resolves a part of ", and not "Resolves " or "Closes ", this issue, as this is a tracking issue and your PR only addresses one package of many needing updating.
Related Issues
None
Questions
None.
Other
- If you are interested in working on this RFC, for each pull request, please only update the tests for a single package.
- As mentioned above, please do NOT make extraneous changes to test cases. We are not interested in changing tests wholesale. Nor are we interested in new "creative" changes. We are only interested in migrating from relative tolerance testing to ULP diff based testing Failure to match the behavior of the existing tests and to respect this guidance will result in your PRs being automatically closed without review.
- As this is a "Good First Issue", you are strongly encouraged to avoid using AI when authoring your contribution. One of the primary intents of Good First Issues is to help introduce you to stdlib, its development environment, and the contribution process, as documented in the contributing guide. Most new contributors are unfamiliar with stdlib and its conventions, and thus fail to appropriately use LLMs and AI when authoring contributions, most often generating AI slop and leading to wasted time. Don't be one of those people. :) Take the time to manually author your first several PRs, and, once you are intimately familiar with project conventions, you can consider leveraging AI to augment your dev tasks.
Checklist
- I have read and understood the Code of Conduct.
- Searched for existing issues and pull requests.
- The issue name begins with
RFC:.
- Ngôn ngữ chính
- JavaScript
- Star
- 6k
- Fork
- 1.3k
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 586
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của stdlib-js/stdlib
-
Fix JavaScript lint errorsCó thể đã có người làm @lb1192176991-lab đã nhận 2 ngày trước. Đang mởGood First Issue
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
stdlib-js/stdlib#15831 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`@stdlib/string/base/percent-encode` produces malformed encoding and silently drops charactersCó thể đã có người làm @barbierajput378-pixel đã nhận 6 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
stdlib-js/stdlib#15595 · 6 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: kumaraswamy/kurtosis returns non-excess kurtosis (missing −3)Có thể đã có người làm @Planeshifter đã nhận 6 ngày trước. Đang mởBug Statistics
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
stdlib-js/stdlib#15461 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: rayleigh/mgf returns wrong values due to misplaced parenthesisCó thể đã có người làm @anandkaranubc đã nhận 9 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
stdlib-js/stdlib#15456 · 6 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
@stdlib/array/fixed-endian-factory allows misaligned byte offsets and fractional lengthsCó thể đã có người làm @kanikasharma-18 đã nhận 21 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
stdlib-js/stdlib#15193 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của stdlib-js/stdlib
Issue tương tự
-
Link Checker ReportĐang mởautomated issue report
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
0. to triage bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
sindresorhus/eslint-plugin-unicorn#3825 ·
Maintainer thường phản hồi trong vòng 1 ngày