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> 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 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