xref: /petsc/src/sys/tests/ex6.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
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   const char *val;
9   PetscBool   has;
10 
11   PetscCall(PetscOptionsSetValue(NULL, "-skip_petscrc", NULL));
12   PetscCall(PetscOptionsSetValue(NULL, "-use_gpu_aware_mpi", "0"));
13   PetscFunctionBeginUser;
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