xref: /petsc/src/sys/tests/ex34.c (revision 8ebe3e4e9e00d86ece2e9fcd0cc84910b0ad437c)
1 static char help[] = "Tests IsInf/IsNan routines.\n";
2 
3 #include <petscsys.h>
4 
5 PETSC_INTERN PetscReal zero;
6 PetscReal zero = 0;
7 PETSC_INTERN PetscReal zero2;
8 PetscReal zero2 = 0;
9 
10 #define CALL(call) do { \
11     PetscErrorCode _ierr;                                               \
12     _ierr = PetscPrintf(PETSC_COMM_WORLD,"%-32s -> %s\n",#call,(call)?"True":"False");CHKERRQ(_ierr); \
13   } while (0);
14 
15 int main(int argc, char **argv) {
16 
17   PetscReal neg_zero = PetscRealConstant(-0.0);
18   PetscReal pos_zero = PetscRealConstant(+0.0);
19   PetscReal neg_one  = PetscRealConstant(-1.0);
20   PetscReal pos_one  = PetscRealConstant(+1.0);
21   PetscReal neg_inf  = neg_one/zero; /* -inf */
22   PetscReal pos_inf  = pos_one/zero; /* +inf */
23   PetscReal x_nan    = zero2/zero;   /*  NaN */ /* some compilers may optimize out zero/zero and set x_nan = 1! */
24 
25   PetscErrorCode ierr;
26   ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr;
27 
28   CALL(PetscIsInfReal(neg_zero));
29   CALL(PetscIsInfReal(pos_zero));
30   CALL(PetscIsInfReal(neg_one));
31   CALL(PetscIsInfReal(pos_one));
32   CALL(PetscIsInfReal(neg_inf));
33   CALL(PetscIsInfReal(pos_inf));
34   CALL(PetscIsInfReal(x_nan));
35 
36   CALL(PetscIsNanReal(neg_zero));
37   CALL(PetscIsNanReal(pos_zero));
38   CALL(PetscIsNanReal(neg_one));
39   CALL(PetscIsNanReal(pos_one));
40   CALL(PetscIsNanReal(neg_inf));
41   CALL(PetscIsNanReal(pos_inf));
42   CALL(PetscIsNanReal(x_nan));
43 
44   ierr = PetscFinalize();
45   return ierr;
46 }
47 
48 /*TEST
49 
50    test:
51       output_file: output/ex34.out
52 
53 TEST*/
54