From 5a87e8cf207633a656de4fd5bbdff87e3ecdc704 Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Sun, 17 Aug 2025 01:45:47 +0300 Subject: [PATCH] math.big: fix integer_from_int(min_int) edge case, add tests (#25120) --- vlib/math/big/big_test.v | 2 ++ vlib/math/big/integer.v | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/vlib/math/big/big_test.v b/vlib/math/big/big_test.v index 2097b6a4e7..15c422b0a1 100644 --- a/vlib/math/big/big_test.v +++ b/vlib/math/big/big_test.v @@ -52,6 +52,8 @@ const integer_from_int_test_data = [ IntegerFromTest{ 127, '127' }, IntegerFromTest{ 1024, '1024' }, IntegerFromTest{ 2147483647, '0x7fffffff' }, + IntegerFromTest{ -2147483647, '-2147483647' }, + IntegerFromTest{ -2147483648, '-2147483648' }, ] const integer_from_u64_test_data = [ diff --git a/vlib/math/big/integer.v b/vlib/math/big/integer.v index 15736297b9..8f169301e6 100644 --- a/vlib/math/big/integer.v +++ b/vlib/math/big/integer.v @@ -51,9 +51,16 @@ pub fn integer_from_int(value int) Integer { if value == 0 { return zero_int } - return Integer{ - digits: [u64(iabs(value))] - signum: int_signum(value) + if value == min_int { + return Integer{ + digits: [u64(0x80000000)] + signum: -1 + } + } else { + return Integer{ + digits: [u64(iabs(value))] + signum: int_signum(value) + } } }