xref: /petsc/src/sys/tests/ex34.c (revision 58d68138c660dfb4e9f5b03334792cd4f2ffd7cc)
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) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%-32s -> %s\n", #call, (call) ? "True" : "False"))
11 
12 int main(int argc, char **argv) {
13   PetscReal neg_zero = PetscRealConstant(-0.0);
14   PetscReal pos_zero = PetscRealConstant(+0.0);
15   PetscReal neg_one  = PetscRealConstant(-1.0);
16   PetscReal pos_one  = PetscRealConstant(+1.0);
17   PetscReal neg_inf  = neg_one / zero;          /* -inf */
18   PetscReal pos_inf  = pos_one / zero;          /* +inf */
19   PetscReal x_nan    = zero2 / zero; /*  NaN */ /* some compilers may optimize out zero/zero and set x_nan = 1! */
20 
21   PetscFunctionBeginUser;
22   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
23 
24   CALL(PetscIsInfReal(neg_zero));
25   CALL(PetscIsInfReal(pos_zero));
26   CALL(PetscIsInfReal(neg_one));
27   CALL(PetscIsInfReal(pos_one));
28   CALL(PetscIsInfReal(neg_inf));
29   CALL(PetscIsInfReal(pos_inf));
30   CALL(PetscIsInfReal(x_nan));
31 
32   CALL(PetscIsNanReal(neg_zero));
33   CALL(PetscIsNanReal(pos_zero));
34   CALL(PetscIsNanReal(neg_one));
35   CALL(PetscIsNanReal(pos_one));
36   CALL(PetscIsNanReal(neg_inf));
37   CALL(PetscIsNanReal(pos_inf));
38   CALL(PetscIsNanReal(x_nan));
39 
40   PetscCall(PetscFinalize());
41   return 0;
42 }
43 
44 /*TEST
45 
46    test:
47       output_file: output/ex34.out
48 
49 TEST*/
50