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