1 static char help[] = "Tests options database"; 2 3 #include <petscsys.h> 4 5 #define PetscTestCheck(expr) PetscCheck(expr, PETSC_COMM_SELF, PETSC_ERR_LIB, "Assertion: `%s' failed.", PetscStringize(expr)) 6 7 int main(int argc, char **argv) { 8 const char *val; 9 PetscBool has; 10 11 PetscCall(PetscOptionsSetValue(NULL, "-skip_petscrc", NULL)); 12 PetscCall(PetscOptionsSetValue(NULL, "-use_gpu_aware_mpi", "0")); 13 PetscFunctionBeginUser; 14 PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 15 16 PetscCall(PetscOptionsHasName(NULL, NULL, "-use_gpu_aware_mpi", &has)); 17 PetscTestCheck(has == PETSC_TRUE); 18 PetscCall(PetscOptionsHasName(NULL, NULL, "-abc", &has)); 19 PetscTestCheck(has == PETSC_FALSE); 20 PetscCall(PetscOptionsHasName(NULL, "", "-abc", &has)); 21 PetscTestCheck(has == PETSC_FALSE); 22 PetscCall(PetscOptionsHasName(NULL, "a", "-bc", &has)); 23 PetscTestCheck(has == PETSC_FALSE); 24 PetscCall(PetscOptionsHasName(NULL, "ab", "-c", &has)); 25 PetscTestCheck(has == PETSC_FALSE); 26 PetscCall(PetscOptionsHasName(NULL, "abc", "-", &has)); 27 PetscTestCheck(has == PETSC_FALSE); 28 29 PetscCall(PetscOptionsSetValue(NULL, "-abc", NULL)); 30 PetscCall(PetscOptionsHasName(NULL, NULL, "-abc", &has)); 31 PetscTestCheck(has == PETSC_TRUE); 32 PetscCall(PetscOptionsHasName(NULL, "", "-abc", &has)); 33 PetscTestCheck(has == PETSC_TRUE); 34 PetscCall(PetscOptionsHasName(NULL, "a", "-bc", &has)); 35 PetscTestCheck(has == PETSC_TRUE); 36 PetscCall(PetscOptionsHasName(NULL, "ab", "-c", &has)); 37 PetscTestCheck(has == PETSC_TRUE); 38 PetscCall(PetscOptionsHasName(NULL, "abc", "-", &has)); 39 PetscTestCheck(has == PETSC_TRUE); 40 PetscCall(PetscOptionsClearValue(NULL, "-abc")); 41 PetscCall(PetscOptionsClearValue(NULL, "-ABC")); 42 43 PetscCall(PetscOptionsPrefixPush(NULL, "a")); 44 PetscCall(PetscOptionsSetValue(NULL, "-x", NULL)); 45 PetscCall(PetscOptionsHasName(NULL, NULL, "-ax", &has)); 46 PetscTestCheck(has == PETSC_TRUE); 47 PetscCall(PetscOptionsPrefixPush(NULL, "b")); 48 PetscCall(PetscOptionsSetValue(NULL, "-xy", NULL)); 49 PetscCall(PetscOptionsHasName(NULL, NULL, "-abxy", &has)); 50 PetscTestCheck(has == PETSC_TRUE); 51 PetscCall(PetscOptionsPrefixPop(NULL)); 52 PetscCall(PetscOptionsPrefixPush(NULL, "c")); 53 PetscCall(PetscOptionsSetValue(NULL, "-xz", NULL)); 54 PetscCall(PetscOptionsHasName(NULL, NULL, "-acxz", &has)); 55 PetscTestCheck(has == PETSC_TRUE); 56 PetscCall(PetscOptionsPrefixPop(NULL)); 57 PetscCall(PetscOptionsPrefixPop(NULL)); 58 PetscCall(PetscOptionsClearValue(NULL, "-ax")); 59 PetscCall(PetscOptionsClearValue(NULL, "-abxy")); 60 PetscCall(PetscOptionsClearValue(NULL, "-acxz")); 61 62 PetscCall(PetscOptionsSetValue(NULL, "-FOO", NULL)); 63 PetscCall(PetscOptionsSetValue(NULL, "-FOO", "BAR")); 64 PetscCall(PetscOptionsSetValue(NULL, "-FOO", NULL)); 65 PetscCall(PetscOptionsClearValue(NULL, "-FOO")); 66 PetscCall(PetscOptionsSetValue(NULL, "-FOO", "BAR")); 67 PetscCall(PetscOptionsSetValue(NULL, "-FOO", NULL)); 68 PetscCall(PetscOptionsSetValue(NULL, "-FOO", "BAR")); 69 PetscCall(PetscOptionsClearValue(NULL, "-FOO")); 70 71 { 72 char name[] = "-*_42", c; 73 for (c = 'a'; c <= 'z'; c++) { 74 name[1] = c; 75 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 76 PetscTestCheck(has == PETSC_FALSE); 77 } 78 for (c = 'a'; c <= 'z'; c++) { 79 name[1] = c; 80 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 81 PetscTestCheck(has == PETSC_FALSE); 82 PetscCall(PetscOptionsSetValue(NULL, name, NULL)); 83 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 84 PetscTestCheck(has == PETSC_TRUE); 85 } 86 for (c = 'A'; c <= 'Z'; c++) { 87 name[1] = c; 88 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 89 PetscTestCheck(has == PETSC_TRUE); 90 PetscCall(PetscOptionsClearValue(NULL, name)); 91 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 92 PetscTestCheck(has == PETSC_FALSE); 93 } 94 for (c = 'Z'; c >= 'A'; c--) { 95 name[1] = c; 96 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 97 PetscTestCheck(has == PETSC_FALSE); 98 PetscCall(PetscOptionsSetValue(NULL, name, NULL)); 99 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 100 PetscTestCheck(has == PETSC_TRUE); 101 } 102 for (c = 'a'; c <= 'z'; c++) { 103 name[1] = c; 104 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 105 PetscTestCheck(has == PETSC_TRUE); 106 PetscCall(PetscOptionsClearValue(NULL, name)); 107 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 108 PetscTestCheck(has == PETSC_FALSE); 109 } 110 for (c = 'a'; c <= 'z'; c++) { 111 name[1] = c; 112 PetscCall(PetscOptionsHasName(NULL, NULL, name, &has)); 113 PetscTestCheck(has == PETSC_FALSE); 114 } 115 } 116 117 PetscCall(PetscOptionsSetValue(NULL, "-abc_xyz", "123")); 118 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_xyz", &val, &has)); 119 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 120 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_xyz", &val, &has)); 121 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 122 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_1_xyz", &val, &has)); 123 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 124 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_1_23_xyz", &val, &has)); 125 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 126 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_1_23_456_xyz", &val, &has)); 127 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 128 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_1_23_456_789_xyz", &val, &has)); 129 PetscTestCheck(has == PETSC_TRUE && !strcmp(val, "123")); 130 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_xyz_42", &val, &has)); 131 PetscTestCheck(has == PETSC_FALSE); 132 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc42xyz", &val, &has)); 133 PetscTestCheck(has == PETSC_FALSE); 134 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc42_xyz", &val, &has)); 135 PetscTestCheck(has == PETSC_FALSE); 136 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42xyz", &val, &has)); 137 PetscTestCheck(has == PETSC_FALSE); 138 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc0_42_xyz", &val, &has)); 139 PetscTestCheck(has == PETSC_FALSE); 140 PetscCall(PetscOptionsFindPair(NULL, NULL, "-abc_42_0xyz", &val, &has)); 141 PetscTestCheck(has == PETSC_FALSE); 142 PetscCall(PetscOptionsClearValue(NULL, "-abc_xyz")); 143 144 PetscCall(PetscFinalize()); 145 return 0; 146 } 147 148 /*TEST 149 150 test: 151 152 TEST*/ 153