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 { 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! */ 21 22 PetscFunctionBeginUser; 23 PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 24 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)); 32 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)); 40 41 PetscCall(PetscFinalize()); 42 return 0; 43 } 44 45 /*TEST 46 47 test: 48 output_file: output/ex34.out 49 50 TEST*/ 51