It works fine for int (and long) return type
For me, on Windows 11 and Ubuntu-22.04, both of which are running perl-5.38.0, the last 2 tests of the Math::AnyInt test suite are failing because:
not ok 9 - 1073741824 + 1073741824 : got -2147483648, expected 2147483
+648.
# Failed test '1073741824 + 1073741824 : got -2147483648, expected 2
+147483648.'
# at ../math-anyint/test.pl line 28.
# got: '-2147483648'
# expected: '2147483648'
not ok 10 - Testing NERDVANA's C additon calc()
# Failed test 'Testing NERDVANA's C additon calc()'
# at ../math-anyint/test.pl line 34.
# got: '-2147483648'
# expected: '2147483648'
1..10
# Looks like you failed 2 tests of 10.
I'm wondering why that is.
Looks like you're right - seems it not the reason I tendered. I was too lazy to start up the Ubuntu box, and on Windows both "int" and "long" are always 32 bits so the result will always be the same no matter which type is picked. So I took a (bad) guess.
Do you know why you and I are getting different results ?
Are we hitting undefined (or implementation defined) behaviour ?
Here's a simple Inline::C script that tests for both "int" and "long" inputs and outputs:
use strict;
use warnings;
use Inline C => <<'EOC';
/* As the function appears in AnyInt.pm */
long calc_32bit_signed_in_C(long input) {
return (int32_t)((int32_t)input);
}
/* The same function, renamed to begin with an
underscore, and return type altered to int */
int _calc_32bit_signed_in_C(int input) {
return (int32_t)((int32_t)input);
}
EOC
print calc_32bit_signed_in_C(1073741824 + 1073741824), "\n";
print _calc_32bit_signed_in_C(1073741824 + 1073741824), "\n";
__END__
Outputs:
-2147483648
-2147483648
But you're Math::IntAny test script implies that you are seeing:
2147483648
2147483648
Cheers,
Rob
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.