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