xref: /petsc/src/sys/tests/ex6.c (revision c4762a1b19cd2af06abeed90e8f9d34fb975dd94)
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