Commit be452cea authored by Illya Yalovyy's avatar Illya Yalovyy Committed by Brad Fitzpatrick

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: default avatarRobert Griesemer <gri@golang.org>
parent 1abe22c3
......@@ -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",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment