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