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