1 ################################################################################
3 ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
4 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
5 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
7 ## This program is free software; you can redistribute it and/or
8 ## modify it under the same terms as Perl itself.
10 ################################################################################
19 # if IVSIZE == LONGSIZE
25 # elif IVSIZE == INTSIZE
32 # error "cannot define IV/UV formats"
37 # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
38 defined(PERL_PRIfldbl) && { VERSION != 5.6.0 }
39 /* Not very likely, but let's try anyway. */
40 # define NVef PERL_PRIeldbl
41 # define NVff PERL_PRIfldbl
42 # define NVgf PERL_PRIgldbl
56 Perl_croak(aTHX_ "%.20" NVgf "\n", num);
58 #if { VERSION >= 5.004 }
64 RETVAL = newSVpvf("XX_%" IVdf "_XX", iv);
72 RETVAL = newSVpvf("XX_%" UVuf "_XX", uv);
79 RETVAL = newSVpvf("%" IVdf, IV_MAX);
86 RETVAL = newSVpvf("%" UVuf, UV_MAX);
96 if (ivers($]) < ivers('5.004')) {
97 skip 'skip: No newSVpvf support', 5;
101 my $num = 1.12345678901234567890;
103 eval { Devel::PPPort::croak_NVgf($num) };
104 ok($@ =~ /^1.1234567890/);
106 is(Devel::PPPort::sprintf_iv(-8), 'XX_-8_XX');
107 is(Devel::PPPort::sprintf_uv(15), 'XX_15_XX');
109 my $ivsize = $Config::Config{ivsize};
110 if ($ivsize && ($ivsize == 4 || $ivsize == 8)) {
111 my $ivmax = ($ivsize == 4) ? '2147483647' : '9223372036854775807';
112 my $uvmax = ($ivsize == 4) ? '4294967295' : '18446744073709551615';
113 is(Devel::PPPort::sprintf_ivmax(), $ivmax);
114 is(Devel::PPPort::sprintf_uvmax(), $uvmax);
117 skip 'skip: unknown ivsize', 2;