mirror of
https://github.com/golang/go
synced 2024-11-17 04:55:07 -07:00
math/big: fast path for Cmp if same
math/big.Int Cmp method does not have a fast path for the case if x and y are the same. Fixes #30856 Change-Id: Ia9a5b5f72db9d73af1b13ed6ac39ecff87d10393 Reviewed-on: https://go-review.googlesource.com/c/go/+/178957 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
1abe22c3c1
commit
be452cea42
@ -323,6 +323,8 @@ func (x *Int) Cmp(y *Int) (r int) {
|
||||
// (-x) cmp y == y
|
||||
// (-x) cmp (-y) == -(x cmp y)
|
||||
switch {
|
||||
case x == y:
|
||||
// nothing to do
|
||||
case x.neg == y.neg:
|
||||
r = x.abs.cmp(y.abs)
|
||||
if x.neg {
|
||||
|
@ -1071,6 +1071,20 @@ func TestCmpAbs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestIntCmpSelf(t *testing.T) {
|
||||
for _, s := range cmpAbsTests {
|
||||
x, ok := new(Int).SetString(s, 0)
|
||||
if !ok {
|
||||
t.Fatalf("SetString(%s, 0) failed", s)
|
||||
}
|
||||
got := x.Cmp(x)
|
||||
want := 0
|
||||
if got != want {
|
||||
t.Errorf("x = %s: x.Cmp(x): got %d; want %d", x, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var int64Tests = []string{
|
||||
// int64
|
||||
"0",
|
||||
|
Loading…
Reference in New Issue
Block a user