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