1/* Test file for mpfr_nan_p, mpfr_inf_p, mpfr_number_p, mpfr_zero_p and
2   mpfr_regular_p.
3
4Copyright 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
5Contributed by the Arenaire and Cacao projects, INRIA.
6
7This file is part of the GNU MPFR Library.
8
9The GNU MPFR Library is free software; you can redistribute it and/or modify
10it under the terms of the GNU Lesser General Public License as published by
11the Free Software Foundation; either version 3 of the License, or (at your
12option) any later version.
13
14The GNU MPFR Library is distributed in the hope that it will be useful, but
15WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
17License for more details.
18
19You should have received a copy of the GNU Lesser General Public License
20along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
21http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
2251 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
23
24#include <stdio.h>
25#include <stdlib.h>
26
27#include "mpfr-test.h"
28
29int
30main (void)
31{
32  mpfr_t  x;
33
34  tests_start_mpfr ();
35
36  mpfr_init (x);
37
38  /* check +infinity gives non-zero for mpfr_inf_p only */
39  mpfr_set_ui (x, 1L, MPFR_RNDZ);
40  mpfr_div_ui (x, x, 0L, MPFR_RNDZ);
41  if (mpfr_nan_p (x) || (mpfr_nan_p) (x) )
42    {
43      printf ("Error: mpfr_nan_p(+Inf) gives non-zero\n");
44      exit (1);
45    }
46  if (mpfr_inf_p (x) == 0)
47    {
48      printf ("Error: mpfr_inf_p(+Inf) gives zero\n");
49      exit (1);
50    }
51  if (mpfr_number_p (x) || (mpfr_number_p) (x) )
52    {
53      printf ("Error: mpfr_number_p(+Inf) gives non-zero\n");
54      exit (1);
55    }
56  if (mpfr_zero_p (x) || (mpfr_zero_p) (x) )
57    {
58      printf ("Error: mpfr_zero_p(+Inf) gives non-zero\n");
59      exit (1);
60    }
61  if (mpfr_regular_p (x) || (mpfr_regular_p) (x) )
62    {
63      printf ("Error: mpfr_regular_p(+Inf) gives non-zero\n");
64      exit (1);
65    }
66
67  /* same for -Inf */
68  mpfr_neg (x, x, MPFR_RNDN);
69  if (mpfr_nan_p (x) || (mpfr_nan_p(x)))
70    {
71      printf ("Error: mpfr_nan_p(-Inf) gives non-zero\n");
72      exit (1);
73    }
74  if (mpfr_inf_p (x) == 0)
75    {
76      printf ("Error: mpfr_inf_p(-Inf) gives zero\n");
77      exit (1);
78    }
79  if (mpfr_number_p (x) || (mpfr_number_p)(x) )
80    {
81      printf ("Error: mpfr_number_p(-Inf) gives non-zero\n");
82      exit (1);
83    }
84  if (mpfr_zero_p (x) || (mpfr_zero_p)(x) )
85    {
86      printf ("Error: mpfr_zero_p(-Inf) gives non-zero\n");
87      exit (1);
88    }
89  if (mpfr_regular_p (x) || (mpfr_regular_p) (x) )
90    {
91      printf ("Error: mpfr_regular_p(-Inf) gives non-zero\n");
92      exit (1);
93    }
94
95  /* same for NaN */
96  mpfr_sub (x, x, x, MPFR_RNDN);
97  if (mpfr_nan_p (x) == 0)
98    {
99      printf ("Error: mpfr_nan_p(NaN) gives zero\n");
100      exit (1);
101    }
102  if (mpfr_inf_p (x) || (mpfr_inf_p)(x) )
103    {
104      printf ("Error: mpfr_inf_p(NaN) gives non-zero\n");
105      exit (1);
106    }
107  if (mpfr_number_p (x) || (mpfr_number_p) (x) )
108    {
109      printf ("Error: mpfr_number_p(NaN) gives non-zero\n");
110      exit (1);
111    }
112  if (mpfr_zero_p (x) || (mpfr_zero_p)(x) )
113    {
114      printf ("Error: mpfr_number_p(NaN) gives non-zero\n");
115      exit (1);
116    }
117  if (mpfr_regular_p (x) || (mpfr_regular_p) (x) )
118    {
119      printf ("Error: mpfr_regular_p(NaN) gives non-zero\n");
120      exit (1);
121    }
122
123  /* same for a regular number */
124  mpfr_set_ui (x, 1, MPFR_RNDN);
125  if (mpfr_nan_p (x) || (mpfr_nan_p)(x))
126    {
127      printf ("Error: mpfr_nan_p(1) gives non-zero\n");
128      exit (1);
129    }
130  if (mpfr_inf_p (x) || (mpfr_inf_p)(x) )
131    {
132      printf ("Error: mpfr_inf_p(1) gives non-zero\n");
133      exit (1);
134    }
135  if (mpfr_number_p (x) == 0)
136    {
137      printf ("Error: mpfr_number_p(1) gives zero\n");
138      exit (1);
139    }
140  if (mpfr_zero_p (x) || (mpfr_zero_p) (x) )
141    {
142      printf ("Error: mpfr_zero_p(1) gives non-zero\n");
143      exit (1);
144    }
145  if (mpfr_regular_p (x) == 0 || (mpfr_regular_p) (x) == 0)
146    {
147      printf ("Error: mpfr_regular_p(1) gives zero\n");
148      exit (1);
149    }
150
151  /* Same for +0 */
152  mpfr_set_ui (x, 0, MPFR_RNDN);
153  if (mpfr_nan_p (x) || (mpfr_nan_p)(x))
154    {
155      printf ("Error: mpfr_nan_p(+0) gives non-zero\n");
156      exit (1);
157    }
158  if (mpfr_inf_p (x) || (mpfr_inf_p)(x) )
159    {
160      printf ("Error: mpfr_inf_p(+0) gives non-zero\n");
161      exit (1);
162    }
163  if (mpfr_number_p (x) == 0)
164    {
165      printf ("Error: mpfr_number_p(+0) gives zero\n");
166      exit (1);
167    }
168  if (mpfr_zero_p (x) == 0 )
169    {
170      printf ("Error: mpfr_zero_p(+0) gives zero\n");
171      exit (1);
172    }
173  if (mpfr_regular_p (x) || (mpfr_regular_p) (x) )
174    {
175      printf ("Error: mpfr_regular_p(+0) gives non-zero\n");
176      exit (1);
177    }
178
179  /* Same for -0 */
180  mpfr_set_ui (x, 0, MPFR_RNDN);
181  mpfr_neg (x, x, MPFR_RNDN);
182  if (mpfr_nan_p (x) || (mpfr_nan_p)(x))
183    {
184      printf ("Error: mpfr_nan_p(-0) gives non-zero\n");
185      exit (1);
186    }
187  if (mpfr_inf_p (x) || (mpfr_inf_p)(x) )
188    {
189      printf ("Error: mpfr_inf_p(-0) gives non-zero\n");
190      exit (1);
191    }
192  if (mpfr_number_p (x) == 0)
193    {
194      printf ("Error: mpfr_number_p(-0) gives zero\n");
195      exit (1);
196    }
197  if (mpfr_zero_p (x) == 0 )
198    {
199      printf ("Error: mpfr_zero_p(-0) gives zero\n");
200      exit (1);
201    }
202  if (mpfr_regular_p (x) || (mpfr_regular_p) (x) )
203    {
204      printf ("Error: mpfr_regular_p(-0) gives non-zero\n");
205      exit (1);
206    }
207
208  mpfr_clear (x);
209
210  tests_end_mpfr ();
211  return 0;
212}
213