1
0
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:
Illya Yalovyy 2019-05-25 20:44:13 -07:00 committed by Brad Fitzpatrick
parent 1abe22c3c1
commit be452cea42
2 changed files with 16 additions and 0 deletions

View File

@ -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 {

View File

@ -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",