1/* Test file for mpfr_cmp_ld.
2
3Copyright 2004, 2006-2023 Free Software Foundation, Inc.
4Contributed by the AriC and Caramba projects, INRIA.
5
6This file is part of the GNU MPFR Library.
7
8The GNU MPFR Library is free software; you can redistribute it and/or modify
9it under the terms of the GNU Lesser General Public License as published by
10the Free Software Foundation; either version 3 of the License, or (at your
11option) any later version.
12
13The GNU MPFR Library is distributed in the hope that it will be useful, but
14WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16License for more details.
17
18You should have received a copy of the GNU Lesser General Public License
19along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
20https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
2151 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22
23#include <float.h>
24
25#include "mpfr-test.h"
26#include "ieee_floats.h"
27
28int
29main (void)
30{
31  mpfr_t x;
32  mpfr_exp_t emin;
33
34  tests_start_mpfr ();
35  emin = mpfr_get_emin ();
36
37  mpfr_init2(x, MPFR_LDBL_MANT_DIG);
38
39  mpfr_set_ld (x, 2.34763465L, MPFR_RNDN);
40  if (mpfr_cmp_ld (x, 2.34763465L) != 0)
41    {
42      printf ("Error in mpfr_cmp_ld 2.34763465 and ");
43      mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar('\n');
44      exit (1);
45    }
46  if (mpfr_cmp_ld (x, 2.345L) <= 0)
47    {
48      printf ("Error in mpfr_cmp_ld 2.345 and ");
49      mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar('\n');
50      exit (1);
51    }
52  if (mpfr_cmp_ld (x, 2.4L) >= 0)
53    {
54      printf ("Error in mpfr_cmp_ld 2.4 and ");
55      mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar('\n');
56      exit (1);
57    }
58
59  mpfr_set_ui (x, 0, MPFR_RNDZ);
60  mpfr_neg (x, x, MPFR_RNDZ);
61  if (mpfr_cmp_ld (x, 0.0))
62    {
63      printf ("Error in mpfr_cmp_ld 0.0 and ");
64      mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar('\n');
65      exit (1);
66    }
67
68  mpfr_set_ui (x, 0, MPFR_RNDN);
69  mpfr_ui_div (x, 1, x, MPFR_RNDU);
70  if (mpfr_cmp_ld (x, 0.0) == 0)
71    {
72      printf ("Error in mpfr_cmp_ld (Inf, 0)\n");
73      exit (1);
74    }
75
76  /* Test in reduced exponent range. */
77  set_emin (1);
78  mpfr_set_ui (x, 1, MPFR_RNDN);
79  if (mpfr_cmp_ld (x, 0.9) <= 0)
80    {
81      printf ("Error in reduced exponent range.\n");
82      exit (1);
83    }
84  set_emin (emin);
85
86#if !defined(MPFR_ERRDIVZERO)
87  /* Check NAN */
88  {
89    int c;
90
91    mpfr_clear_flags ();
92    c = mpfr_cmp_ld (x, MPFR_DBL_NAN);
93    if (c != 0 || __gmpfr_flags != MPFR_FLAGS_ERANGE)
94      {
95        printf ("ERROR for NAN (1)\n");
96        printf ("Expected 0, got %d\n", c);
97        printf ("Expected flags:");
98        flags_out (MPFR_FLAGS_ERANGE);
99        printf ("Got flags:     ");
100        flags_out (__gmpfr_flags);
101#ifdef MPFR_NANISNAN
102        printf ("The reason is that NAN == NAN. Please look at the configure "
103                "output\nand Section \"In case of problem\" of the INSTALL "
104                "file.\n");
105#endif
106        exit (1);
107      }
108
109    mpfr_set_nan (x);
110    mpfr_clear_flags ();
111    c = mpfr_cmp_ld (x, 2.0);
112    if (c != 0 || __gmpfr_flags != MPFR_FLAGS_ERANGE)
113      {
114        printf ("ERROR for NAN (2)\n");
115        printf ("Expected 0, got %d\n", c);
116        printf ("Expected flags:");
117        flags_out (MPFR_FLAGS_ERANGE);
118        printf ("Got flags:     ");
119        flags_out (__gmpfr_flags);
120#ifdef MPFR_NANISNAN
121        printf ("The reason is that NAN == NAN. Please look at the configure "
122                "output\nand Section \"In case of problem\" of the INSTALL "
123                "file.\n");
124#endif
125        exit (1);
126      }
127  }
128#endif  /* MPFR_ERRDIVZERO */
129
130  mpfr_clear (x);
131
132  tests_end_mpfr ();
133  return 0;
134}
135
136
137