tlog10.c revision 1.1.1.6
1/* Test file for mpfr_log10. 2 3Copyright 2001-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 "mpfr-test.h" 24 25#ifdef CHECK_EXTERNAL 26static int 27test_log10 (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode) 28{ 29 int res; 30 int ok = rnd_mode == MPFR_RNDN && mpfr_number_p (b) && mpfr_get_prec (a)>=53; 31 if (ok) 32 { 33 mpfr_print_raw (b); 34 } 35 res = mpfr_log10 (a, b, rnd_mode); 36 if (ok) 37 { 38 printf (" "); 39 mpfr_print_raw (a); 40 printf ("\n"); 41 } 42 return res; 43} 44#else 45#define test_log10 mpfr_log10 46#endif 47 48#define TEST_FUNCTION test_log10 49#define TEST_RANDOM_POS 8 50#include "tgeneric.c" 51 52int 53main (int argc, char *argv[]) 54{ 55 mpfr_t x, y; 56 unsigned int n; 57 int inex; 58 59 tests_start_mpfr (); 60 61 test_generic (MPFR_PREC_MIN, 100, 20); 62 63 mpfr_init2 (x, 53); 64 mpfr_init2 (y, 53); 65 66 /* check NaN */ 67 mpfr_set_nan (x); 68 inex = test_log10 (y, x, MPFR_RNDN); 69 MPFR_ASSERTN (mpfr_nan_p (y) && inex == 0); 70 71 /* check Inf */ 72 mpfr_set_inf (x, -1); 73 inex = test_log10 (y, x, MPFR_RNDN); 74 MPFR_ASSERTN (mpfr_nan_p (y) && inex == 0); 75 76 mpfr_set_inf (x, 1); 77 inex = test_log10 (y, x, MPFR_RNDN); 78 MPFR_ASSERTN (mpfr_inf_p (y) && mpfr_sgn (y) > 0 && inex == 0); 79 80 mpfr_set_ui (x, 0, MPFR_RNDN); 81 inex = test_log10 (x, x, MPFR_RNDN); 82 MPFR_ASSERTN (mpfr_inf_p (x) && mpfr_sgn (x) < 0 && inex == 0); 83 mpfr_set_ui (x, 0, MPFR_RNDN); 84 mpfr_neg (x, x, MPFR_RNDN); 85 inex = test_log10 (x, x, MPFR_RNDN); 86 MPFR_ASSERTN (mpfr_inf_p (x) && mpfr_sgn (x) < 0 && inex == 0); 87 88 /* check negative argument */ 89 mpfr_set_si (x, -1, MPFR_RNDN); 90 inex = test_log10 (y, x, MPFR_RNDN); 91 MPFR_ASSERTN (mpfr_nan_p (y) && inex == 0); 92 93 /* check log10(1) = 0 */ 94 mpfr_set_ui (x, 1, MPFR_RNDN); 95 inex = test_log10 (y, x, MPFR_RNDN); 96 MPFR_ASSERTN (mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y) && inex == 0); 97 98 /* check log10(10^n)=n */ 99 mpfr_set_ui (x, 1, MPFR_RNDN); 100 for (n = 1; n <= 15; n++) 101 { 102 mpfr_mul_ui (x, x, 10, MPFR_RNDN); /* x = 10^n */ 103 inex = test_log10 (y, x, MPFR_RNDN); 104 if (mpfr_cmp_ui (y, n)) 105 { 106 printf ("log10(10^n) <> n for n=%u\n", n); 107 exit (1); 108 } 109 MPFR_ASSERTN (inex == 0); 110 } 111 112 mpfr_clear (x); 113 mpfr_clear (y); 114 115 data_check ("data/log10", mpfr_log10, "mpfr_log10"); 116 117 tests_end_mpfr (); 118 return 0; 119} 120