-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor(math): refactor ApproxRoot for readality #22263
Conversation
📝 WalkthroughWalkthroughThe changes in this pull request modify the Changes
Possibly related PRs
Suggested reviewers
📜 Recent review detailsConfiguration used: .coderabbit.yml 📒 Files selected for processing (1)
🧰 Additional context used📓 Path-based instructions (1)math/dec_test.go (2)Pattern Pattern 🔇 Additional comments (1)math/dec_test.go (1)
The new test cases properly cover important edge cases:
These additions improve the test coverage and help validate the behavior of ApproxRoot for these boundary conditions. Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (1)
math/dec.go (1)
470-473
: LGTM: Good addition for handling root == 0 case.The new condition to handle the case when
root
is zero is a good improvement. It correctly returnsLegacyOneDec()
for this special case.Consider updating the comment to be more precise:
-- Return 1 as root 0 of any number is considered 1. ++ Return 1 as the 0th root of any number is undefined, but 1 is a sensible default.
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
📒 Files selected for processing (1)
- math/dec.go (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
math/dec.go (1)
Pattern
**/*.go
: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.
🔇 Additional comments (2)
math/dec.go (2)
470-504
: Summary: Improvements to ApproxRoot functionThe changes to the
ApproxRoot
function are well-implemented and improve both functionality and readability:
- Addition of a special case for
root == 0
.- Simplification of the loop condition.
- Updated comments for better clarity.
These modifications enhance the function without altering its core behavior. The changes are localized and shouldn't negatively impact other parts of the codebase.
488-504
: Approve simplification of loop condition.The simplification of the loop condition improves readability while maintaining the same functionality. The new condition
delta.Abs().LTE(smallestDec)
is a clear and concise way to determine when to break the loop.Let's verify if this change affects other parts of the codebase:
✅ Verification successful
Approve the simplification of the loop condition.
The change is localized to the
ApproxRoot
function withinmath/dec.go
and is covered by existing tests inmath/dec_test.go
. No other parts of the codebase are affected by this modification.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check for other usages of ApproxRoot function # and verify if they rely on the old loop condition. # Search for ApproxRoot function calls rg --type go "ApproxRoot\(" -A 5 -B 5Length of output: 3068
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The changes look good! More readable and efficient code. 👍
It would be great if you could add a test scenario to for root=0
to the test-suite. This would help with regression.
delta.Set(d).QuoMut(prev) | ||
delta.SubMut(guess) | ||
delta.QuoInt64Mut(int64(root)) | ||
|
||
guess.AddMut(delta) | ||
|
||
// Stop when delta is small enough | ||
if delta.Abs().LTE(smallestDec) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 more readable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK
@xujiangyu, let's add the recommended test by @alpe before merging. |
ok, I‘ll add it |
The test cases where root==0 or input == 0 were add. Tks for advice. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (1)
math/dec_test.go (1)
452-454
: Test cases don't fully validate the zero root handling.While the added test cases cover the basic zero root scenario, they don't validate important edge cases such as negative inputs with zero root. Consider adding test cases for:
- Negative numbers with zero root
- Very large numbers with zero root
- Very small numbers (close to zero) with zero root
Example test cases to add:
{math.LegacyNewDec(-2), 0, math.LegacyOneDec()}, // -2 ^ 0 => 1.0 {math.LegacyNewDecWithPrec(1, 18), 0, math.LegacyOneDec()}, // 0.000000000000000001 ^ 0 => 1.0 {math.LegacyNewDecFromInt(math.NewInt(999999999)), 0, math.LegacyOneDec()}, // 999999999 ^ 0 => 1.0
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
📒 Files selected for processing (1)
- math/dec_test.go (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
math/dec_test.go (2)
Pattern
**/*.go
: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.
Pattern
**/*_test.go
: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"
@julienrbrt ,hey bro, the requirements seem to be difficult to complete. Could you help to hand-merge? |
Head branch was pushed to by a user without write access
* main: (24 commits) build(deps): upgrade to iavl@v1.3.1 (#22436) docs: Update tendermint validators query pagination documentation (#22412) refactor(client/v2): offchain uses client/v2/factory (#22344) feat: wire new handlers to grpc (#22333) fix(x/group): proper address rendering in error (#22425) refactor(serevr/v2/cometbft): update `RegisterQueryHandlers` and GRPC queries (#22403) docs: update ADR 59 (#22423) build(deps): Bump github.com/fsnotify/fsnotify from 1.7.0 to 1.8.0 in /tools/cosmovisor (#22407) docs: Module account address documentation (#22289) feat(baseapp): add per message telemetry (#22175) docs: Update Twitter Links to X in Documentation (#22408) docs: redirect the remote generation page (#22404) refactor(serverv2): remove unused interface methods, honuor context (#22394) fix(server/v2): return ErrHelp (#22399) feat(indexer): implement `schema.HasModuleCodec` interface in the `bank` module (#22349) refactor(math): refactor ApproxRoot for readality (#22263) docs: fix KWallet Handbook (#22395) feat(client/v2): broadcast logic (#22282) refactor(server/v2): eager config loading (#22267) test(system): check feePayers signature (#22389) ...
Description
Closes: #XXXX
Author Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
!
in the type prefix if API or client breaking changeCHANGELOG.md
Reviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
Please see Pull Request Reviewer section in the contributing guide for more information on how to review a pull request.
I have...
Summary by CodeRabbit
New Features
ApproxRoot
method to handle zero as a root parameter, improving calculation accuracy.Bug Fixes
Documentation