1# Add various tests here as they come to mind. 2 3use strict; 4use warnings; 5use Math::MPFR qw(:mpfr); 6use Config; 7use Test::More; 8 9if($] < 5.03 && $Config{nvtype} ne '__float128') { 10 plan skip_all => "Perl's string to NV assignment is unreliable\n"; 11} 12 13else { 14 15 plan tests => 11; 16 17 my $m = 9.007199254740991e15; # 2 ** 53 18 19 cmp_ok(nvtoa(2 ** 105), '==', 2 ** 105, "nvtoa(2 ** 105) == 2 ** 105"); 20 cmp_ok(nvtoa(2 ** 106), '==', 2 ** 106, "nvtoa(2 ** 106) == 2 ** 106"); 21 22 cmp_ok(nvtoa($m * (2 ** 53)), '==', $m * (2 ** 53), "nvtoa($m*(2**53)) == $m*(2**53)"); 23 cmp_ok(nvtoa($m * (2 ** 54)), '==', $m * (2 ** 54), "nvtoa($m*(2**54)) == $m*(2**54)"); 24 25 cmp_ok(nvtoa(2 ** 120), '==', 2 ** 120, "nvtoa(2 ** 120) == 2 ** 120"); 26 27 cmp_ok(nvtoa(29 * (2 ** 1001)), '==', 29 * (2 ** 1001), "nvtoa(29 * (2 ** 1001)) == 29 * (2 ** 1001)"); 28 29 cmp_ok(nvtoa(1.7976931348623157e+308), '==', 1.7976931348623157e+308, "nvtoa(DBL_MAX) == DBL_MAX"); 30 31 cmp_ok(nvtoa(123456789012345.0), '==', 123456789012345.0, "nvtoa(123456789012345.0) == 123456789012345.0"); 32 33 cmp_ok(nvtoa(1.0 / 10.0), 'eq', '0.1', "nvtoa(1.0 / 10.0) eq '0.1'"); 34 35 if($Config{nvsize} > 8 && 36 $Config{nvtype} eq 'long double' && 37 Math::MPFR::_required_ldbl_mant_dig() != 113) { 38 39 cmp_ok(nvtoa(1.4 / 10), 'eq', '0.14', "nvtoa(1.4 / 10) eq '0.14'" ); 40 41 if(Math::MPFR::_required_ldbl_mant_dig() == 2098) { 42 # DoubleDouble 43 cmp_ok(nvtoa(1.4 / 100), 'ne', '0.014', "nvtoa(1.4 / 10) ne '0.014'"); # 0.014000...0013 44 } 45 else { 46 # 64-bit precision NV 47 cmp_ok(nvtoa(1.4 / 100), 'eq', '0.014', "nvtoa(1.4 / 10) eq '0.014'"); 48 } 49 } 50 else { 51 cmp_ok(nvtoa(1.4 / 10), 'ne', '0.14', "nvtoa(1.4 / 10) ne '0.14'" ); # 0.13999...99 52 53 if($Config{nvtype} eq '__float128' || ($Config{nvsize} > 8 && $Config{nvtype} eq 'long double')) { 54 # 113-bit precision NV 55 cmp_ok(nvtoa(1.4 / 100), 'eq', '0.014', "nvtoa(1.4 / 100) eq '0.014'"); 56 } 57 else { 58 # 53-bit precision NV 59 cmp_ok(nvtoa(1.4 / 100), 'ne', '0.014', "nvtoa(1.4 / 100) ne '0.014'"); # 0.013999...99 60 } 61 } 62} 63