From b19fa76c6ec46b14c3c12772896fc14cd065957a Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Sat, 31 May 2025 08:11:16 +0300 Subject: [PATCH] math.big: make is_power_of_2() be false for negatives (it now matches Julia's ispow2/1) (#24619) --- vlib/math/big/big_test.v | 1 + vlib/math/big/integer.v | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/vlib/math/big/big_test.v b/vlib/math/big/big_test.v index 52e47f6ea9..964a8bbdaf 100644 --- a/vlib/math/big/big_test.v +++ b/vlib/math/big/big_test.v @@ -110,6 +110,7 @@ struct IsXTest { // vfmt off const is_power_of_2_test_data = [ + IsXTest{ "-4", false }, IsXTest{ u32(0b110000000000), false }, IsXTest{ "537502395172353242345", false }, IsXTest{ "590295810358705700000", false }, diff --git a/vlib/math/big/integer.v b/vlib/math/big/integer.v index 078ebaf6d4..89b540f2ad 100644 --- a/vlib/math/big/integer.v +++ b/vlib/math/big/integer.v @@ -1214,7 +1214,7 @@ pub fn (x Integer) is_odd() bool { // is_power_of_2 returns true when the integer `x` satisfies `2^n`, where `n >= 0` @[direct_array_access; inline] pub fn (x Integer) is_power_of_2() bool { - if x.signum == 0 { + if x.signum <= 0 { return false }