1*c4762a1bSJed Brown 2*c4762a1bSJed Brown static char help[] = "Tests catching of floating point exceptions.\n\n"; 3*c4762a1bSJed Brown 4*c4762a1bSJed Brown #include <petscsys.h> 5*c4762a1bSJed Brown 6*c4762a1bSJed Brown int CreateError(PetscReal x) 7*c4762a1bSJed Brown { 8*c4762a1bSJed Brown PetscErrorCode ierr; 9*c4762a1bSJed Brown 10*c4762a1bSJed Brown PetscFunctionBegin; 11*c4762a1bSJed Brown x = 1.0/x; 12*c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_SELF,"x = %g\n",(double)x);CHKERRQ(ierr); 13*c4762a1bSJed Brown PetscFunctionReturn(0); 14*c4762a1bSJed Brown } 15*c4762a1bSJed Brown 16*c4762a1bSJed Brown int main(int argc,char **argv) 17*c4762a1bSJed Brown { 18*c4762a1bSJed Brown PetscErrorCode ierr; 19*c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 20*c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_SELF,"This is a contrived example to test floating pointing\n");CHKERRQ(ierr); 21*c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_SELF,"It is not a true error.\n");CHKERRQ(ierr); 22*c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_SELF,"Run with -fp_trap to catch the floating point error\n");CHKERRQ(ierr); 23*c4762a1bSJed Brown ierr = CreateError(0.0);CHKERRQ(ierr); 24*c4762a1bSJed Brown return 0; 25*c4762a1bSJed Brown } 26*c4762a1bSJed Brown 27*c4762a1bSJed Brown 28*c4762a1bSJed Brown /* 29*c4762a1bSJed Brown 30*c4762a1bSJed Brown Because this example may produce different output on different machines we filter out everything. 31*c4762a1bSJed Brown This makes the test ineffective but currently we don't have a good way to know which machines should handle 32*c4762a1bSJed Brown the floating point exceptions properly. 33*c4762a1bSJed Brown 34*c4762a1bSJed Brown */ 35*c4762a1bSJed Brown /*TEST 36*c4762a1bSJed Brown 37*c4762a1bSJed Brown test: 38*c4762a1bSJed Brown args: -fp_trap -error_output_stdout 39*c4762a1bSJed Brown filter: Error: true 40*c4762a1bSJed Brown 41*c4762a1bSJed Brown TEST*/ 42