File: nvtoa3.t

package info (click to toggle)
libmath-mpfr-perl 4.45-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,716 kB
  • sloc: perl: 1,508; ansic: 517; makefile: 9
file content (62 lines) | stat: -rwxr-xr-x 2,087 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Add various tests here as they come to mind.

use strict;
use warnings;
use Math::MPFR qw(:mpfr);
use Config;
use Test::More;

if($] < 5.03 && $Config{nvtype} ne '__float128') {
  plan skip_all => "Perl's string to NV assignment is unreliable\n";
}

else {

  plan tests => 11;

  my $m = 9.007199254740991e15; # 2 ** 53

  cmp_ok(nvtoa(2 ** 105), '==', 2 ** 105, "nvtoa(2 ** 105) == 2 ** 105");
  cmp_ok(nvtoa(2 ** 106), '==', 2 ** 106, "nvtoa(2 ** 106) == 2 ** 106");

  cmp_ok(nvtoa($m * (2 ** 53)), '==', $m * (2 ** 53), "nvtoa($m*(2**53)) == $m*(2**53)");
  cmp_ok(nvtoa($m * (2 ** 54)), '==', $m * (2 ** 54), "nvtoa($m*(2**54)) == $m*(2**54)");

  cmp_ok(nvtoa(2 ** 120), '==', 2 ** 120, "nvtoa(2 ** 120) == 2 ** 120");

  cmp_ok(nvtoa(29 * (2 ** 1001)), '==', 29 * (2 ** 1001), "nvtoa(29 * (2 ** 1001)) == 29 * (2 ** 1001)");

  cmp_ok(nvtoa(1.7976931348623157e+308), '==', 1.7976931348623157e+308, "nvtoa(DBL_MAX) == DBL_MAX");

  cmp_ok(nvtoa(123456789012345.0), '==', 123456789012345.0, "nvtoa(123456789012345.0) == 123456789012345.0");

  cmp_ok(nvtoa(1.0 / 10.0), 'eq', '0.1', "nvtoa(1.0 / 10.0) eq '0.1'");

  if($Config{nvsize} > 8 &&
     $Config{nvtype} eq 'long double' &&
     Math::MPFR::_required_ldbl_mant_dig() != 113) {

    cmp_ok(nvtoa(1.4 / 10),  'eq', '0.14',  "nvtoa(1.4 / 10) eq '0.14'" );

    if(Math::MPFR::_required_ldbl_mant_dig() == 2098) {
      # DoubleDouble
      cmp_ok(nvtoa(1.4 / 100), 'ne', '0.014', "nvtoa(1.4 / 10) ne '0.014'"); # 0.014000...0013
    }
    else {
      # 64-bit precision NV
      cmp_ok(nvtoa(1.4 / 100), 'eq', '0.014', "nvtoa(1.4 / 10) eq '0.014'");
    }
  }
  else {
    cmp_ok(nvtoa(1.4 / 10),  'ne', '0.14',  "nvtoa(1.4 / 10) ne '0.14'" ); # 0.13999...99

    if($Config{nvtype} eq '__float128' || ($Config{nvsize} > 8 && $Config{nvtype} eq 'long double')) {
      # 113-bit precision NV
      cmp_ok(nvtoa(1.4 / 100), 'eq', '0.014', "nvtoa(1.4 / 100) eq '0.014'");
    }
    else {
      # 53-bit precision NV
      cmp_ok(nvtoa(1.4 / 100), 'ne', '0.014', "nvtoa(1.4 / 100) ne '0.014'"); # 0.013999...99
    }
  }
}