1: static char help[] = "Tests IsInf/IsNan routines.\n";
3: #include <petscsys.h>
5: PETSC_INTERN PetscReal zero;
6: PetscReal zero = 0;
7: PETSC_INTERN PetscReal zero2;
8: PetscReal zero2 = 0;
10: #define CALL(call) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%-32s -> %s\n", #call, (call) ? "True" : "False"))
12: int main(int argc, char **argv)
13: {
14: PetscReal neg_zero = PetscRealConstant(-0.0);
15: PetscReal pos_zero = PetscRealConstant(+0.0);
16: PetscReal neg_one = PetscRealConstant(-1.0);
17: PetscReal pos_one = PetscRealConstant(+1.0);
18: PetscReal neg_inf = neg_one / zero; /* -inf */
19: PetscReal pos_inf = pos_one / zero; /* +inf */
20: PetscReal x_nan = zero2 / zero; /* NaN */ /* some compilers may optimize out zero/zero and set x_nan = 1! */
22: PetscFunctionBeginUser;
23: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
25: CALL(PetscIsInfReal(neg_zero));
26: CALL(PetscIsInfReal(pos_zero));
27: CALL(PetscIsInfReal(neg_one));
28: CALL(PetscIsInfReal(pos_one));
29: CALL(PetscIsInfReal(neg_inf));
30: CALL(PetscIsInfReal(pos_inf));
31: CALL(PetscIsInfReal(x_nan));
33: CALL(PetscIsNanReal(neg_zero));
34: CALL(PetscIsNanReal(pos_zero));
35: CALL(PetscIsNanReal(neg_one));
36: CALL(PetscIsNanReal(pos_one));
37: CALL(PetscIsNanReal(neg_inf));
38: CALL(PetscIsNanReal(pos_inf));
39: CALL(PetscIsNanReal(x_nan));
41: PetscCall(PetscFinalize());
42: return 0;
43: }
45: /*TEST
47: test:
48: args: -fp_trap 0
49: output_file: output/ex34.out
51: TEST*/