1*108513bbSJunchao Zhang static char help[] = "Tests inclusion of petscsystypes.h.\n\n";
2*108513bbSJunchao Zhang
3*108513bbSJunchao Zhang #include <petscsys.h>
4*108513bbSJunchao Zhang
5*108513bbSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX)
6*108513bbSJunchao Zhang template <class Type>
TestComplexOperators(Type x,PetscBool check,double & ans)7*108513bbSJunchao Zhang PetscErrorCode TestComplexOperators(Type x, PetscBool check, double &ans)
8*108513bbSJunchao Zhang {
9*108513bbSJunchao Zhang double res;
10*108513bbSJunchao Zhang PetscComplex z = x;
11*108513bbSJunchao Zhang
12*108513bbSJunchao Zhang PetscFunctionBeginUser;
13*108513bbSJunchao Zhang (void)z;
14*108513bbSJunchao Zhang z = x;
15*108513bbSJunchao Zhang z += x;
16*108513bbSJunchao Zhang z = z + x;
17*108513bbSJunchao Zhang z = x + z;
18*108513bbSJunchao Zhang z = x;
19*108513bbSJunchao Zhang z -= x;
20*108513bbSJunchao Zhang z = z - x;
21*108513bbSJunchao Zhang z = x - z;
22*108513bbSJunchao Zhang z = x;
23*108513bbSJunchao Zhang z *= x;
24*108513bbSJunchao Zhang z = z * x;
25*108513bbSJunchao Zhang z = x * z;
26*108513bbSJunchao Zhang z = x;
27*108513bbSJunchao Zhang z /= x;
28*108513bbSJunchao Zhang z = z / x;
29*108513bbSJunchao Zhang z = x / z;
30*108513bbSJunchao Zhang (void)(z == x);
31*108513bbSJunchao Zhang (void)(x == z);
32*108513bbSJunchao Zhang (void)(z != x);
33*108513bbSJunchao Zhang (void)(x != z);
34*108513bbSJunchao Zhang res = PetscRealPartComplex(z);
35*108513bbSJunchao Zhang if (check) PetscCheck(PetscAbs(ans - res) < 1e-5, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Expected %g, but get incorrect result %g", ans, res);
36*108513bbSJunchao Zhang else ans = res;
37*108513bbSJunchao Zhang PetscFunctionReturn(PETSC_SUCCESS);
38*108513bbSJunchao Zhang }
39*108513bbSJunchao Zhang #endif
40*108513bbSJunchao Zhang
main(int argc,char ** argv)41*108513bbSJunchao Zhang int main(int argc, char **argv)
42*108513bbSJunchao Zhang {
43*108513bbSJunchao Zhang /* numeric types */
44*108513bbSJunchao Zhang PetscScalar svalue;
45*108513bbSJunchao Zhang PetscReal rvalue;
46*108513bbSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX)
47*108513bbSJunchao Zhang PetscComplex cvalue;
48*108513bbSJunchao Zhang #endif
49*108513bbSJunchao Zhang
50*108513bbSJunchao Zhang /* integer types */
51*108513bbSJunchao Zhang PetscInt64 i64;
52*108513bbSJunchao Zhang PetscInt i;
53*108513bbSJunchao Zhang PetscBLASInt bi;
54*108513bbSJunchao Zhang PetscMPIInt rank;
55*108513bbSJunchao Zhang
56*108513bbSJunchao Zhang /* PETSc types */
57*108513bbSJunchao Zhang PetscBool b;
58*108513bbSJunchao Zhang PetscErrorCode ierr;
59*108513bbSJunchao Zhang PetscClassId cid;
60*108513bbSJunchao Zhang PetscEnum e;
61*108513bbSJunchao Zhang PetscShort s;
62*108513bbSJunchao Zhang char c;
63*108513bbSJunchao Zhang PetscFloat f;
64*108513bbSJunchao Zhang PetscLogDouble ld;
65*108513bbSJunchao Zhang PetscObjectId oid;
66*108513bbSJunchao Zhang PetscObjectState ost;
67*108513bbSJunchao Zhang
68*108513bbSJunchao Zhang /* Enums */
69*108513bbSJunchao Zhang PetscCopyMode cp;
70*108513bbSJunchao Zhang PetscDataType dt;
71*108513bbSJunchao Zhang PetscFileMode fm;
72*108513bbSJunchao Zhang PetscDLMode dlm;
73*108513bbSJunchao Zhang PetscBinarySeekType bsk;
74*108513bbSJunchao Zhang PetscBuildTwoSidedType b2s;
75*108513bbSJunchao Zhang InsertMode im;
76*108513bbSJunchao Zhang PetscSubcommType subct;
77*108513bbSJunchao Zhang
78*108513bbSJunchao Zhang /* Sys objects */
79*108513bbSJunchao Zhang PetscObject obj;
80*108513bbSJunchao Zhang PetscRandom rand;
81*108513bbSJunchao Zhang PetscToken token;
82*108513bbSJunchao Zhang PetscFunctionList flist;
83*108513bbSJunchao Zhang PetscDLHandle dlh;
84*108513bbSJunchao Zhang PetscObjectList olist;
85*108513bbSJunchao Zhang PetscDLLibrary dlist;
86*108513bbSJunchao Zhang PetscContainer cont;
87*108513bbSJunchao Zhang PetscSubcomm subc;
88*108513bbSJunchao Zhang PetscHeap pheap;
89*108513bbSJunchao Zhang PetscShmComm scomm;
90*108513bbSJunchao Zhang PetscOmpCtrl octrl;
91*108513bbSJunchao Zhang PetscSegBuffer sbuff;
92*108513bbSJunchao Zhang PetscOptionsHelpPrinted oh;
93*108513bbSJunchao Zhang
94*108513bbSJunchao Zhang PetscFunctionBeginUser;
95*108513bbSJunchao Zhang PetscCall(PetscInitialize(&argc, &argv, nullptr, help));
96*108513bbSJunchao Zhang svalue = 0.0;
97*108513bbSJunchao Zhang rvalue = 0.0;
98*108513bbSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX)
99*108513bbSJunchao Zhang cvalue = 0.0;
100*108513bbSJunchao Zhang #endif
101*108513bbSJunchao Zhang
102*108513bbSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX)
103*108513bbSJunchao Zhang double ans = 0.0;
104*108513bbSJunchao Zhang
105*108513bbSJunchao Zhang // PetscComplex .op. integer
106*108513bbSJunchao Zhang PetscCall(TestComplexOperators((PetscReal)1.0, PETSC_FALSE, ans)); // assuming with PetscReal, we get a correct answer
107*108513bbSJunchao Zhang PetscCall(TestComplexOperators((char)1, PETSC_TRUE, ans)); // check against the answer
108*108513bbSJunchao Zhang PetscCall(TestComplexOperators((signed char)1, PETSC_TRUE, ans));
109*108513bbSJunchao Zhang PetscCall(TestComplexOperators((signed short)1, PETSC_TRUE, ans));
110*108513bbSJunchao Zhang PetscCall(TestComplexOperators((signed int)1, PETSC_TRUE, ans));
111*108513bbSJunchao Zhang PetscCall(TestComplexOperators((signed long)1, PETSC_TRUE, ans));
112*108513bbSJunchao Zhang PetscCall(TestComplexOperators((signed long long)1, PETSC_TRUE, ans));
113*108513bbSJunchao Zhang
114*108513bbSJunchao Zhang PetscCall(TestComplexOperators((unsigned char)1, PETSC_TRUE, ans));
115*108513bbSJunchao Zhang PetscCall(TestComplexOperators((unsigned short)1, PETSC_TRUE, ans));
116*108513bbSJunchao Zhang PetscCall(TestComplexOperators((unsigned int)1, PETSC_TRUE, ans));
117*108513bbSJunchao Zhang PetscCall(TestComplexOperators((unsigned long)1, PETSC_TRUE, ans));
118*108513bbSJunchao Zhang PetscCall(TestComplexOperators((unsigned long long)1, PETSC_TRUE, ans));
119*108513bbSJunchao Zhang
120*108513bbSJunchao Zhang // PetscComplex .op. floating point
121*108513bbSJunchao Zhang PetscCall(TestComplexOperators((PetscReal)0.5, PETSC_FALSE, ans)); // get an answer again
122*108513bbSJunchao Zhang #if defined(PETSC_HAVE_REAL___FP16)
123*108513bbSJunchao Zhang PetscCall(TestComplexOperators((__fp16)0.5, PETSC_TRUE, ans));
124*108513bbSJunchao Zhang #endif
125*108513bbSJunchao Zhang PetscCall(TestComplexOperators((float)0.5, PETSC_TRUE, ans));
126*108513bbSJunchao Zhang PetscCall(TestComplexOperators((double)0.5, PETSC_TRUE, ans));
127*108513bbSJunchao Zhang PetscCall(TestComplexOperators((long double)0.5, PETSC_TRUE, ans));
128*108513bbSJunchao Zhang #if defined(PETSC_HAVE_REAL___FLOAT128)
129*108513bbSJunchao Zhang PetscCall(TestComplexOperators((__float128)0.5, PETSC_TRUE, ans));
130*108513bbSJunchao Zhang #endif
131*108513bbSJunchao Zhang
132*108513bbSJunchao Zhang #endif
133*108513bbSJunchao Zhang
134*108513bbSJunchao Zhang i64 = 0;
135*108513bbSJunchao Zhang i = 0;
136*108513bbSJunchao Zhang bi = 0;
137*108513bbSJunchao Zhang rank = 0;
138*108513bbSJunchao Zhang
139*108513bbSJunchao Zhang b = PETSC_FALSE;
140*108513bbSJunchao Zhang cid = 0;
141*108513bbSJunchao Zhang e = ENUM_DUMMY;
142*108513bbSJunchao Zhang s = 0;
143*108513bbSJunchao Zhang c = '\0';
144*108513bbSJunchao Zhang f = 0;
145*108513bbSJunchao Zhang ld = 0.0;
146*108513bbSJunchao Zhang oid = 0;
147*108513bbSJunchao Zhang ost = 0;
148*108513bbSJunchao Zhang
149*108513bbSJunchao Zhang cp = PETSC_COPY_VALUES;
150*108513bbSJunchao Zhang dt = PETSC_DATATYPE_UNKNOWN;
151*108513bbSJunchao Zhang fm = FILE_MODE_READ;
152*108513bbSJunchao Zhang dlm = PETSC_DL_DECIDE;
153*108513bbSJunchao Zhang bsk = PETSC_BINARY_SEEK_SET;
154*108513bbSJunchao Zhang b2s = PETSC_BUILDTWOSIDED_NOTSET;
155*108513bbSJunchao Zhang im = INSERT_VALUES;
156*108513bbSJunchao Zhang subct = PETSC_SUBCOMM_GENERAL;
157*108513bbSJunchao Zhang
158*108513bbSJunchao Zhang obj = nullptr;
159*108513bbSJunchao Zhang rand = nullptr;
160*108513bbSJunchao Zhang token = nullptr;
161*108513bbSJunchao Zhang flist = nullptr;
162*108513bbSJunchao Zhang dlh = nullptr;
163*108513bbSJunchao Zhang olist = nullptr;
164*108513bbSJunchao Zhang dlist = nullptr;
165*108513bbSJunchao Zhang cont = nullptr;
166*108513bbSJunchao Zhang subc = nullptr;
167*108513bbSJunchao Zhang pheap = nullptr;
168*108513bbSJunchao Zhang scomm = nullptr;
169*108513bbSJunchao Zhang octrl = nullptr;
170*108513bbSJunchao Zhang sbuff = nullptr;
171*108513bbSJunchao Zhang oh = nullptr;
172*108513bbSJunchao Zhang
173*108513bbSJunchao Zhang /* prevent to issue warning about unused-but-set variables */
174*108513bbSJunchao Zhang (void)help;
175*108513bbSJunchao Zhang
176*108513bbSJunchao Zhang (void)svalue;
177*108513bbSJunchao Zhang (void)rvalue;
178*108513bbSJunchao Zhang #if defined(PETSC_HAVE_COMPLEX)
179*108513bbSJunchao Zhang (void)cvalue;
180*108513bbSJunchao Zhang #endif
181*108513bbSJunchao Zhang (void)i64;
182*108513bbSJunchao Zhang (void)i;
183*108513bbSJunchao Zhang (void)bi;
184*108513bbSJunchao Zhang (void)rank;
185*108513bbSJunchao Zhang
186*108513bbSJunchao Zhang (void)b;
187*108513bbSJunchao Zhang (void)ierr;
188*108513bbSJunchao Zhang (void)cid;
189*108513bbSJunchao Zhang (void)e;
190*108513bbSJunchao Zhang (void)s;
191*108513bbSJunchao Zhang (void)c;
192*108513bbSJunchao Zhang (void)f;
193*108513bbSJunchao Zhang (void)ld;
194*108513bbSJunchao Zhang (void)oid;
195*108513bbSJunchao Zhang (void)ost;
196*108513bbSJunchao Zhang
197*108513bbSJunchao Zhang (void)cp;
198*108513bbSJunchao Zhang (void)dt;
199*108513bbSJunchao Zhang (void)fm;
200*108513bbSJunchao Zhang (void)dlm;
201*108513bbSJunchao Zhang (void)bsk;
202*108513bbSJunchao Zhang (void)b2s;
203*108513bbSJunchao Zhang (void)im;
204*108513bbSJunchao Zhang (void)subct;
205*108513bbSJunchao Zhang
206*108513bbSJunchao Zhang (void)obj;
207*108513bbSJunchao Zhang (void)rand;
208*108513bbSJunchao Zhang (void)token;
209*108513bbSJunchao Zhang (void)flist;
210*108513bbSJunchao Zhang (void)dlh;
211*108513bbSJunchao Zhang (void)olist;
212*108513bbSJunchao Zhang (void)dlist;
213*108513bbSJunchao Zhang (void)cont;
214*108513bbSJunchao Zhang (void)subc;
215*108513bbSJunchao Zhang (void)pheap;
216*108513bbSJunchao Zhang (void)scomm;
217*108513bbSJunchao Zhang (void)octrl;
218*108513bbSJunchao Zhang (void)sbuff;
219*108513bbSJunchao Zhang (void)oh;
220*108513bbSJunchao Zhang PetscCall(PetscFinalize());
221*108513bbSJunchao Zhang return 0;
222*108513bbSJunchao Zhang }
223*108513bbSJunchao Zhang
224*108513bbSJunchao Zhang /*TEST
225*108513bbSJunchao Zhang
226*108513bbSJunchao Zhang test:
227*108513bbSJunchao Zhang output_file: output/empty.out
228*108513bbSJunchao Zhang
229*108513bbSJunchao Zhang TEST*/
230