aboutsummaryrefslogtreecommitdiff
path: root/lib/std/math
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/math')
-rw-r--r--lib/std/math/big/int.zig8
-rw-r--r--lib/std/math/big/int_test.zig6
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/std/math/big/int.zig b/lib/std/math/big/int.zig
index 3cd72dd8e4..81982eac51 100644
--- a/lib/std/math/big/int.zig
+++ b/lib/std/math/big/int.zig
@@ -549,8 +549,8 @@ pub const Mutable = struct {
return;
}
- const r_len = llshr(r.limbs[0..], a.limbs[0..a.limbs.len], shift);
- r.len = a.limbs.len - (shift / limb_bits);
+ llshr(r.limbs[0..], a.limbs[0..a.limbs.len], shift);
+ r.normalize(a.limbs.len - (shift / limb_bits));
r.positive = a.positive;
}
@@ -1348,7 +1348,9 @@ pub const Const = struct {
/// Returns true if `a == 0`.
pub fn eqZero(a: Const) bool {
- return a.limbs.len == 1 and a.limbs[0] == 0;
+ var d: Limb = 0;
+ for (a.limbs) |limb| d |= limb;
+ return d == 0;
}
/// Returns true if `|a| == |b|`.
diff --git a/lib/std/math/big/int_test.zig b/lib/std/math/big/int_test.zig
index b73e9f90d6..179e55ff69 100644
--- a/lib/std/math/big/int_test.zig
+++ b/lib/std/math/big/int_test.zig
@@ -1287,6 +1287,12 @@ test "big.int shift-right multi" {
try a.shiftRight(a, 67);
testing.expect((try a.to(u64)) == 0x1fffe0001dddc222);
+
+ try a.set(0xffff0000eeee1111dddd2222cccc3333);
+ try a.shiftRight(a, 63);
+ try a.shiftRight(a, 63);
+ try a.shiftRight(a, 2);
+ testing.expect(a.eqZero());
}
test "big.int shift-left single" {