1c4762a1bSJed Brown static char help[] = "Tests options database"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscsys.h> 4c4762a1bSJed Brown 52c71b3e2SJacob Faibussowitsch #define PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB,"Assertion: `%s' failed.",PetscStringize(expr)) 6c4762a1bSJed Brown 7c4762a1bSJed Brown int main(int argc,char **argv) 8c4762a1bSJed Brown { 9c4762a1bSJed Brown const char *val; 10c4762a1bSJed Brown PetscBool has; 11c4762a1bSJed Brown PetscErrorCode ierr; 12c4762a1bSJed Brown 13c4762a1bSJed Brown ierr = PetscOptionsSetValue(NULL,"-skip_petscrc", NULL);if (ierr) return ierr; 14a87ad0e9SStefano Zampini ierr = PetscOptionsSetValue(NULL,"-use_gpu_aware_mpi", "0");if (ierr) return ierr; 15*9566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,NULL,help)); 16c4762a1bSJed Brown 17*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-use_gpu_aware_mpi",&has)); 182c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 19*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 202c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 21*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 222c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 23*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 242c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 25*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 27*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 282c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 29c4762a1bSJed Brown 30*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc",NULL)); 31*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 33*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 342c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 35*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 362c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 37*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 39*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 402c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 41*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc")); 42*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ABC")); 43c4762a1bSJed Brown 44*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"a")); 45*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-x",NULL)); 46*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-ax",&has)); 472c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 48*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"b")); 49*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xy",NULL)); 50*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abxy",&has)); 512c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 52*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 53*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"c")); 54*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xz",NULL)); 55*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-acxz",&has)); 562c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 57*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 58*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 59*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ax")); 60*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abxy")); 61*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-acxz")); 62c4762a1bSJed Brown 63*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 64*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 65*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 66*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-FOO")); 67*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 68*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 69*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 70*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-FOO")); 71c4762a1bSJed Brown 72c4762a1bSJed Brown { 73c4762a1bSJed Brown char name[] = "-*_42", c; 74c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 75c4762a1bSJed Brown name[1] = c; 76*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 772c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 78c4762a1bSJed Brown } 79c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 80c4762a1bSJed Brown name[1] = c; 81*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 822c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 83*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 84*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 852c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 86c4762a1bSJed Brown } 87c4762a1bSJed Brown for (c = 'A'; c <= 'Z'; c++) { 88c4762a1bSJed Brown name[1] = c; 89*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 902c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 91*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 92*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 932c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 94c4762a1bSJed Brown } 95c4762a1bSJed Brown for (c = 'Z'; c >= 'A'; c--) { 96c4762a1bSJed Brown name[1] = c; 97*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 982c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 99*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 100*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1012c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 102c4762a1bSJed Brown } 103c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 104c4762a1bSJed Brown name[1] = c; 105*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1062c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 107*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 108*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1092c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 110c4762a1bSJed Brown } 111c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 112c4762a1bSJed Brown name[1] = c; 113*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1142c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 115c4762a1bSJed Brown } 116c4762a1bSJed Brown } 117c4762a1bSJed Brown 118*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc_xyz","123")); 119*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz",&val,&has)); 1202c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 121*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_xyz",&val,&has)); 1222c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 123*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_xyz",&val,&has)); 1242c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 125*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_xyz",&val,&has)); 1262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 127*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_xyz",&val,&has)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 129*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_789_xyz",&val,&has)); 1302c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 131*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz_42",&val,&has)); 1322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 133*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42xyz",&val,&has)); 1342c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 135*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42_xyz",&val,&has)); 1362c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 137*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42xyz",&val,&has)); 1382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 139*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc0_42_xyz",&val,&has)); 1402c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 141*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_0xyz",&val,&has)); 1422c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 143*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc_xyz")); 144c4762a1bSJed Brown 145*9566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 146b122ec5aSJacob Faibussowitsch return 0; 147c4762a1bSJed Brown } 148c4762a1bSJed Brown 149c4762a1bSJed Brown /*TEST 150c4762a1bSJed Brown 151c4762a1bSJed Brown test: 152c4762a1bSJed Brown 153c4762a1bSJed Brown TEST*/ 154