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 12*d0609cedSBarry Smith PetscCall(PetscOptionsSetValue(NULL,"-skip_petscrc", NULL)); 13*d0609cedSBarry Smith PetscCall(PetscOptionsSetValue(NULL,"-use_gpu_aware_mpi", "0")); 149566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,NULL,help)); 15c4762a1bSJed Brown 169566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-use_gpu_aware_mpi",&has)); 172c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 189566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 192c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 209566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 212c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 229566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 232c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 249566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 252c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 269566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 272c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 28c4762a1bSJed Brown 299566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc",NULL)); 309566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abc",&has)); 312c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 329566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"","-abc",&has)); 332c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 349566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"a","-bc",&has)); 352c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 369566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"ab","-c",&has)); 372c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 389566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,"abc","-",&has)); 392c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 409566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc")); 419566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ABC")); 42c4762a1bSJed Brown 439566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"a")); 449566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-x",NULL)); 459566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-ax",&has)); 462c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 479566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"b")); 489566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xy",NULL)); 499566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-abxy",&has)); 502c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 519566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 529566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPush(NULL,"c")); 539566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-xz",NULL)); 549566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,"-acxz",&has)); 552c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 569566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 579566063dSJacob Faibussowitsch PetscCall(PetscOptionsPrefixPop(NULL)); 589566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-ax")); 599566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abxy")); 609566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-acxz")); 61c4762a1bSJed Brown 629566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 639566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 649566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 659566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-FOO")); 669566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 679566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO",NULL)); 689566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-FOO","BAR")); 699566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-FOO")); 70c4762a1bSJed Brown 71c4762a1bSJed Brown { 72c4762a1bSJed Brown char name[] = "-*_42", c; 73c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 74c4762a1bSJed Brown name[1] = c; 759566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 762c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 77c4762a1bSJed Brown } 78c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 79c4762a1bSJed Brown name[1] = c; 809566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 812c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 829566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 839566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 842c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 85c4762a1bSJed Brown } 86c4762a1bSJed Brown for (c = 'A'; c <= 'Z'; c++) { 87c4762a1bSJed Brown name[1] = c; 889566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 892c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 909566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 919566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 922c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 93c4762a1bSJed Brown } 94c4762a1bSJed Brown for (c = 'Z'; c >= 'A'; c--) { 95c4762a1bSJed Brown name[1] = c; 969566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 972c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 989566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,name,NULL)); 999566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1002c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 101c4762a1bSJed Brown } 102c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 103c4762a1bSJed Brown name[1] = c; 1049566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1052c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 1069566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,name)); 1079566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1082c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 109c4762a1bSJed Brown } 110c4762a1bSJed Brown for (c = 'a'; c <= 'z'; c++) { 111c4762a1bSJed Brown name[1] = c; 1129566063dSJacob Faibussowitsch PetscCall(PetscOptionsHasName(NULL,NULL,name,&has)); 1132c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 114c4762a1bSJed Brown } 115c4762a1bSJed Brown } 116c4762a1bSJed Brown 1179566063dSJacob Faibussowitsch PetscCall(PetscOptionsSetValue(NULL,"-abc_xyz","123")); 1189566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz",&val,&has)); 1192c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1209566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_xyz",&val,&has)); 1212c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1229566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_xyz",&val,&has)); 1232c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1249566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_xyz",&val,&has)); 1252c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1269566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_xyz",&val,&has)); 1272c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1289566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_1_23_456_789_xyz",&val,&has)); 1292c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE && !strcmp(val,"123")); 1309566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_xyz_42",&val,&has)); 1312c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1329566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42xyz",&val,&has)); 1332c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1349566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc42_xyz",&val,&has)); 1352c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1369566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42xyz",&val,&has)); 1372c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1389566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc0_42_xyz",&val,&has)); 1392c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1409566063dSJacob Faibussowitsch PetscCall(PetscOptionsFindPair(NULL,NULL,"-abc_42_0xyz",&val,&has)); 1412c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 1429566063dSJacob Faibussowitsch PetscCall(PetscOptionsClearValue(NULL,"-abc_xyz")); 143c4762a1bSJed Brown 1449566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 145b122ec5aSJacob Faibussowitsch return 0; 146c4762a1bSJed Brown } 147c4762a1bSJed Brown 148c4762a1bSJed Brown /*TEST 149c4762a1bSJed Brown 150c4762a1bSJed Brown test: 151c4762a1bSJed Brown 152c4762a1bSJed Brown TEST*/ 153