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 7d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 8d71ae5a4SJacob Faibussowitsch { 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")); 14327415f7SBarry 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: 152*3886731fSPierre Jolivet output_file: output/empty.out 153c4762a1bSJed Brown 154c4762a1bSJed Brown TEST*/ 155