xref: /petsc/src/sys/tests/ex15.cxx (revision 941063a0c6742edd6ba3de0434f3e015738e856a)
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