Skip to content

Commit 861adfc

Browse files
authored
math.big: add new .bitwise_com/0 method + tests (#24476)
1 parent 1957162 commit 861adfc

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

vlib/math/big/big_test.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,12 @@ fn test_bitwise_ops() {
813813
assert b.bitwise_or(b) == b
814814
assert b.bitwise_and(b) == b
815815
assert b.bitwise_not() == big.zero_int
816+
assert big.three_int.neg().bitwise_com() == big.two_int
817+
assert big.two_int.neg().bitwise_com() == big.one_int
818+
assert big.one_int.neg().bitwise_com() == big.zero_int
819+
assert big.zero_int.bitwise_com() == big.one_int.neg()
820+
assert big.one_int.bitwise_com() == big.two_int.neg()
821+
assert big.two_int.bitwise_com() == big.three_int.neg()
816822
}
817823

818824
fn test_get_bit() {

vlib/math/big/integer.v

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,17 @@ pub fn (a Integer) bitwise_not() Integer {
743743
}
744744
}
745745

746+
// bitwise_com returns "bitwise complement" of integer `a`.
747+
//
748+
// Note: this function consider the sign of the input.
749+
pub fn (a Integer) bitwise_com() Integer {
750+
return if a.signum == -1 {
751+
a.abs() - one_int
752+
} else {
753+
(a + one_int).neg()
754+
}
755+
}
756+
746757
// bitwise_xor returns the "bitwise exclusive or" of the integers `|a|` and `|b|`.
747758
//
748759
// Note: both operands are treated as absolute values.

0 commit comments

Comments
 (0)