1 /* Test file for mpfr_min & mpfr_max.
2
3 Copyright 2004, 2006-2023 Free Software Foundation, Inc.
4 Contributed by the AriC and Caramba projects, INRIA.
5
6 This file is part of the GNU MPFR Library.
7
8 The GNU MPFR Library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12
13 The GNU MPFR Library is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
20 https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
21 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22
23 #include "mpfr-test.h"
24
25 int
main(void)26 main (void)
27 {
28 mpfr_t x, y, z;
29
30 tests_start_mpfr ();
31
32 mpfr_init (x);
33 mpfr_init (y);
34 mpfr_init (z);
35
36 /* case x=NaN && y=NAN */
37 mpfr_set_nan (x);
38 mpfr_set_nan (y);
39 mpfr_min (z, x, y, MPFR_RNDN);
40 if (!mpfr_nan_p (z))
41 {
42 printf ("Error in mpfr_min (NaN, NaN)\n");
43 exit (1);
44 }
45 mpfr_max (z, x, y, MPFR_RNDN);
46 if (!mpfr_nan_p (z))
47 {
48 printf ("Error in mpfr_max (NaN, NaN)\n");
49 exit (1);
50 }
51 /* case x=NaN */
52 mpfr_set_nan (x);
53 mpfr_set_ui (y, 0, MPFR_RNDN);
54 mpfr_min (z, x, y, MPFR_RNDN);
55 if (mpfr_cmp_ui (z, 0))
56 {
57 printf ("Error in mpfr_min (NaN, 0)\n");
58 exit (1);
59 }
60 mpfr_min (z, y, x, MPFR_RNDN);
61 if (mpfr_cmp_ui (z, 0))
62 {
63 printf ("Error in mpfr_min (0, NaN)\n");
64 exit (1);
65 }
66 mpfr_max (z, x, y, MPFR_RNDN);
67 if (mpfr_cmp_ui (z, 0))
68 {
69 printf ("Error in mpfr_max (NaN, 0)\n");
70 exit (1);
71 }
72 mpfr_max (z, y, x, MPFR_RNDN);
73 if (mpfr_cmp_ui (z, 0))
74 {
75 printf ("Error in mpfr_max (0, NaN)\n");
76 exit (1);
77 }
78 /* Case x=0+ and x=0- */
79 mpfr_set_ui (x, 0, MPFR_RNDN);
80 mpfr_set_ui (y, 0, MPFR_RNDN); MPFR_SET_NEG(y);
81 mpfr_max (z, x, y, MPFR_RNDN);
82 if (!MPFR_IS_ZERO(z) || MPFR_IS_NEG(z))
83 {
84 printf ("Error in mpfr_max (0+, 0-)\n");
85 exit (1);
86 }
87 mpfr_min (z, x, y, MPFR_RNDN);
88 if (!MPFR_IS_ZERO(z) || MPFR_IS_POS(z))
89 {
90 printf ("Error in mpfr_min (0+, 0-)\n");
91 exit (1);
92 }
93 /* Case x=0- and y=0+ */
94 mpfr_set_ui (x, 0, MPFR_RNDN); MPFR_SET_NEG(x);
95 mpfr_set_ui (y, 0, MPFR_RNDN);
96 mpfr_max (z, x, y, MPFR_RNDN);
97 if (!MPFR_IS_ZERO(z) || MPFR_IS_NEG(z))
98 {
99 printf ("Error in mpfr_max (0+, 0-)\n");
100 exit (1);
101 }
102 mpfr_min (z, x, y, MPFR_RNDN);
103 if (!MPFR_IS_ZERO(z) || MPFR_IS_POS(z))
104 {
105 printf ("Error in mpfr_min (0+, 0-)\n");
106 exit (1);
107 }
108
109 /* case x=+Inf */
110 mpfr_set_inf (x, 1);
111 mpfr_set_si (y, -12, MPFR_RNDN);
112 mpfr_min (z, x, y, MPFR_RNDN);
113 if ( mpfr_cmp_si (z, -12) )
114 {
115 printf ("Error in mpfr_min (+Inf, -12)\n");
116 exit (1);
117 }
118 mpfr_max (z, x, y, MPFR_RNDN);
119 if ( !MPFR_IS_INF(z) || MPFR_IS_NEG(z) )
120 {
121 printf ("Error in mpfr_max (+Inf, 12)\n");
122 exit (1);
123 }
124 /* case x=-Inf */
125 mpfr_set_inf (x, -1);
126 mpfr_set_ui (y, 12, MPFR_RNDN);
127 mpfr_max (z, x, y, MPFR_RNDN);
128 if ( mpfr_cmp_ui (z, 12) )
129 {
130 printf ("Error in mpfr_max (-Inf, 12)\n");
131 exit (1);
132 }
133 mpfr_min (z, x, y, MPFR_RNDN);
134 if ( !MPFR_IS_INF(z) || MPFR_IS_POS(z) )
135 {
136 printf ("Error in mpfr_min (-Inf, 12)\n");
137 exit (1);
138 }
139
140 /* case x=17 and y=42 */
141 mpfr_set_ui (x, 17, MPFR_RNDN);
142 mpfr_set_ui (y, 42, MPFR_RNDN);
143 mpfr_max (z, x, y, MPFR_RNDN);
144 if ( mpfr_cmp_ui (z, 42) )
145 {
146 printf ("Error in mpfr_max (17, 42)\n");
147 exit (1);
148 }
149 mpfr_max (z, y, x, MPFR_RNDN);
150 if ( mpfr_cmp_ui (z, 42) )
151 {
152 printf ("Error in mpfr_max (42, 17)\n");
153 exit (1);
154 }
155 mpfr_min (z, y, x, MPFR_RNDN);
156 if ( mpfr_cmp_ui (z, 17) )
157 {
158 printf ("Error in mpfr_min (42, 17)\n");
159 exit (1);
160 }
161
162 mpfr_clear (x);
163 mpfr_clear (y);
164 mpfr_clear (z);
165
166 tests_end_mpfr ();
167 return 0;
168 }
169