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 12d0609cedSBarry Smith PetscCall(PetscOptionsSetValue(NULL,"-skip_petscrc", NULL)); 13d0609cedSBarry Smith PetscCall(PetscOptionsSetValue(NULL,"-use_gpu_aware_mpi", "0")); 14*327415f7SBarry Smith PetscFunctionBeginUser; 159566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,NULL,help)); 16c4762a1bSJed Brown 179566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-use_gpu_aware_mpi",&has)); 182c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 199566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 202c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 219566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 222c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 239566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 242c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 259566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 279566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 282c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 29c4762a1bSJed Brown 309566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc",NULL)); 319566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 339566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 342c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 359566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 362c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 379566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 399566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 402c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 419566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc")); 429566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ABC")); 43c4762a1bSJed Brown 449566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"a")); 459566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-x",NULL)); 469566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-ax",&has)); 472c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 489566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"b")); 499566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xy",NULL)); 509566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abxy",&has)); 512c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 529566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 539566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"c")); 549566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xz",NULL)); 559566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-acxz",&has)); 562c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 579566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 589566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 599566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ax")); 609566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abxy")); 619566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-acxz")); 62c4762a1bSJed Brown 639566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 649566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 659566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 669566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-FOO")); 679566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 689566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 699566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 709566063dSJacob 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; 769566063dSJacob 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; 819566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 822c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 839566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 849566063dSJacob 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; 899566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 902c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 919566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 929566063dSJacob 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; 979566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 982c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 999566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 1009566063dSJacob 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; 1059566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1062c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 1079566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 1089566063dSJacob 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; 1139566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1142c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 115c4762a1bSJed Brown } 116c4762a1bSJed Brown } 117c4762a1bSJed Brown 1189566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc_xyz","123")); 1199566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz",&val,&has)); 1202c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1219566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_xyz",&val,&has)); 1222c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1239566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_xyz",&val,&has)); 1242c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1259566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_xyz",&val,&has)); 1262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1279566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_xyz",&val,&has)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1299566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_789_xyz",&val,&has)); 1302c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1319566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz_42",&val,&has)); 1322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1339566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42xyz",&val,&has)); 1342c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1359566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42_xyz",&val,&has)); 1362c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1379566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42xyz",&val,&has)); 1382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1399566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc0_42_xyz",&val,&has)); 1402c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1419566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_0xyz",&val,&has)); 1422c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1439566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc_xyz")); 144c4762a1bSJed Brown 1459566063dSJacob 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