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 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