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*/