1efee5258Smrg /* Test file for mpfr_dim.
2efee5258Smrg
3*ba125506Smrg Copyright 2004-2023 Free Software Foundation, Inc.
4efdec83bSmrg Contributed by the AriC and Caramba projects, INRIA.
5efee5258Smrg
6efee5258Smrg This file is part of the GNU MPFR Library.
7efee5258Smrg
8efee5258Smrg The GNU MPFR Library is free software; you can redistribute it and/or modify
9efee5258Smrg it under the terms of the GNU Lesser General Public License as published by
10efee5258Smrg the Free Software Foundation; either version 3 of the License, or (at your
11efee5258Smrg option) any later version.
12efee5258Smrg
13efee5258Smrg The GNU MPFR Library is distributed in the hope that it will be useful, but
14efee5258Smrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15efee5258Smrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16efee5258Smrg License for more details.
17efee5258Smrg
18efee5258Smrg You should have received a copy of the GNU Lesser General Public License
19efee5258Smrg along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
202ba2404bSmrg https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
21efee5258Smrg 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22efee5258Smrg
23efee5258Smrg #include "mpfr-test.h"
24efee5258Smrg
25efee5258Smrg #define TEST_FUNCTION mpfr_dim
26efee5258Smrg #define TWO_ARGS
27efee5258Smrg #define TEST_RANDOM_EMIN -20
28efee5258Smrg #define TEST_RANDOM_EMAX 20
29efee5258Smrg #define TGENERIC_NOWARNING 1
30efee5258Smrg #include "tgeneric.c"
31efee5258Smrg
32efee5258Smrg int
main(void)33efee5258Smrg main (void)
34efee5258Smrg {
35efee5258Smrg mpfr_t x, y, z;
36efee5258Smrg
37efee5258Smrg tests_start_mpfr ();
38efee5258Smrg
39efee5258Smrg mpfr_init (x);
40efee5258Smrg mpfr_init (y);
41efee5258Smrg mpfr_init (z);
42efee5258Smrg
43efee5258Smrg /* case x=NaN */
44efee5258Smrg mpfr_set_nan (x);
45efee5258Smrg mpfr_set_ui (y, 0, MPFR_RNDN);
46efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
47efee5258Smrg if (!mpfr_nan_p (z))
48efee5258Smrg {
49efee5258Smrg printf ("Error in mpfr_dim (NaN, 0)\n");
50efee5258Smrg exit (1);
51efee5258Smrg }
52efee5258Smrg
53efee5258Smrg /* case x=+Inf */
54efee5258Smrg mpfr_set_inf (x, 1);
55efee5258Smrg mpfr_set_ui (y, 0, MPFR_RNDN);
56efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
57efee5258Smrg if (!mpfr_inf_p (z) || mpfr_sgn (z) < 0)
58efee5258Smrg {
59efee5258Smrg printf ("Error in mpfr_dim (+Inf, 0)\n");
60efee5258Smrg exit (1);
61efee5258Smrg }
62efee5258Smrg
63efee5258Smrg /* case x=-Inf */
64efee5258Smrg mpfr_set_inf (x, -1);
65efee5258Smrg mpfr_set_ui (y, 0, MPFR_RNDN);
66efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
67299c6f0cSmrg if (MPFR_NOTZERO (z) || MPFR_IS_NEG (z))
68efee5258Smrg {
69efee5258Smrg printf ("Error in mpfr_dim (-Inf, 0)\n");
70efee5258Smrg exit (1);
71efee5258Smrg }
72efee5258Smrg
73efee5258Smrg /* case x=y=+Inf */
74efee5258Smrg mpfr_set_inf (x, 1);
75efee5258Smrg mpfr_set_inf (y, 1);
76efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
77299c6f0cSmrg if (MPFR_NOTZERO (z) || MPFR_IS_NEG (z))
78efee5258Smrg {
79efee5258Smrg printf ("Error in mpfr_dim (+Inf, +Inf)\n");
80efee5258Smrg exit (1);
81efee5258Smrg }
82efee5258Smrg
83efee5258Smrg /* case x > y */
84efee5258Smrg mpfr_set_ui (x, 2, MPFR_RNDN);
85efee5258Smrg mpfr_set_ui (y, 1, MPFR_RNDN);
86efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
87efee5258Smrg if (mpfr_cmp_ui (z, 1))
88efee5258Smrg {
89efee5258Smrg printf ("Error in mpfr_dim (2, 1)\n");
90efee5258Smrg exit (1);
91efee5258Smrg }
92efee5258Smrg
93efee5258Smrg /* case x < y */
94efee5258Smrg mpfr_set_ui (x, 1, MPFR_RNDN);
95efee5258Smrg mpfr_set_ui (y, 2, MPFR_RNDN);
96efee5258Smrg mpfr_dim (z, x, y, MPFR_RNDN);
97efee5258Smrg if (mpfr_cmp_ui (z, 0))
98efee5258Smrg {
99efee5258Smrg printf ("Error in mpfr_dim (1, 2)\n");
100efee5258Smrg exit (1);
101efee5258Smrg }
102efee5258Smrg
103efee5258Smrg mpfr_clear (x);
104efee5258Smrg mpfr_clear (y);
105efee5258Smrg mpfr_clear (z);
106efee5258Smrg
107299c6f0cSmrg test_generic (MPFR_PREC_MIN, 220, 42);
108efee5258Smrg
109efee5258Smrg tests_end_mpfr ();
110efee5258Smrg return 0;
111efee5258Smrg }
112