mirror of https://github.com/golang/go.git
math/big: implement Int.TrailingZeroBits
Implemented via the underlying nat.trailingZeroBits. Fixes #29578 Change-Id: If9876c5a74b107cbabceb7547bef4e44501f6745 Reviewed-on: https://go-review.googlesource.com/c/go/+/160681 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
14a58d65e3
commit
ef891e1c83
|
|
@ -448,6 +448,12 @@ func (x *Int) BitLen() int {
|
|||
return x.abs.bitLen()
|
||||
}
|
||||
|
||||
// TrailingZeroBits returns the number of consecutive least significant zero
|
||||
// bits of |x|.
|
||||
func (x *Int) TrailingZeroBits() uint {
|
||||
return x.abs.trailingZeroBits()
|
||||
}
|
||||
|
||||
// Exp sets z = x**y mod |m| (i.e. the sign of m is ignored), and returns z.
|
||||
// If m == nil or m == 0, z = x**y unless y <= 0 then z = 1.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -1335,6 +1335,31 @@ func TestBitSet(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
var tzbTests = []struct {
|
||||
in string
|
||||
out uint
|
||||
}{
|
||||
{"0", 0},
|
||||
{"1", 0},
|
||||
{"-1", 0},
|
||||
{"4", 2},
|
||||
{"-8", 3},
|
||||
{"0x4000000000000000000", 74},
|
||||
{"-0x8000000000000000000", 75},
|
||||
}
|
||||
|
||||
func TestTrailingZeroBits(t *testing.T) {
|
||||
for i, test := range tzbTests {
|
||||
in, _ := new(Int).SetString(test.in, 0)
|
||||
want := test.out
|
||||
got := in.TrailingZeroBits()
|
||||
|
||||
if got != want {
|
||||
t.Errorf("#%d: got %v want %v", i, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkBitset(b *testing.B) {
|
||||
z := new(Int)
|
||||
z.SetBit(z, 512, 1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue