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