math.big: fix integer_from_int(min_int) edge case, add tests (#25120)

This commit is contained in:
Mike 2025-08-17 01:45:47 +03:00 committed by GitHub
parent a88df91938
commit 5a87e8cf20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 3 deletions

View file

@ -52,6 +52,8 @@ const integer_from_int_test_data = [
IntegerFromTest{ 127, '127' }, IntegerFromTest{ 127, '127' },
IntegerFromTest{ 1024, '1024' }, IntegerFromTest{ 1024, '1024' },
IntegerFromTest{ 2147483647, '0x7fffffff' }, IntegerFromTest{ 2147483647, '0x7fffffff' },
IntegerFromTest{ -2147483647, '-2147483647' },
IntegerFromTest{ -2147483648, '-2147483648' },
] ]
const integer_from_u64_test_data = [ const integer_from_u64_test_data = [

View file

@ -51,9 +51,16 @@ pub fn integer_from_int(value int) Integer {
if value == 0 { if value == 0 {
return zero_int return zero_int
} }
return Integer{ if value == min_int {
digits: [u64(iabs(value))] return Integer{
signum: int_signum(value) digits: [u64(0x80000000)]
signum: -1
}
} else {
return Integer{
digits: [u64(iabs(value))]
signum: int_signum(value)
}
} }
} }