1c4762a1bSJed Brown static char help[] = "Test PETSc integer hash map.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petsc/private/hashmapi.h> 4c4762a1bSJed Brown #include <petsc/private/hashmapiv.h> 5c4762a1bSJed Brown #include <petscsys.h> 6c4762a1bSJed Brown 7c4762a1bSJed Brown /* Unused, keep it for testing purposes */ 8c4762a1bSJed Brown PETSC_HASH_MAP(HMapIP, PetscInt, void*, PetscHashInt, PetscHashEqual, NULL) 9c4762a1bSJed Brown 10c4762a1bSJed Brown /* Unused, keep it for testing purposes */ 11c4762a1bSJed Brown typedef struct { double x; double y; double z; } Point; 12c4762a1bSJed Brown static Point origin = {0.0, 0.0, 0.0}; 13c4762a1bSJed Brown PETSC_HASH_MAP(HMapIS, PetscInt, Point, PetscHashInt, PetscHashEqual, origin) 14c4762a1bSJed Brown 15*5f80ce2aSJacob Faibussowitsch #define PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB, "Assertion: `%s' failed.", PetscStringize(expr)) 16c4762a1bSJed Brown 17c4762a1bSJed Brown int main(int argc,char **argv) 18c4762a1bSJed Brown { 19c4762a1bSJed Brown PetscHMapI ht = NULL, hd; 20c4762a1bSJed Brown PetscHMapIV htv; 21c4762a1bSJed Brown PetscInt n, v, koff, keys[4], voff, vals[4],na,nb,i,size,*karray,off; 22c4762a1bSJed Brown PetscScalar *varray,*vwork; 23c4762a1bSJed Brown PetscBool has, flag; 24c4762a1bSJed Brown PetscErrorCode ierr; 25c4762a1bSJed Brown 26c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 27c4762a1bSJed Brown 28*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapICreate(&ht)); 292c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL); 30*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 312c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 32c4762a1bSJed Brown 33*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIResize(ht,0)); 34*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 352c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 36c4762a1bSJed Brown 37*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIHas(ht,123,&has)); 382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 39*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGet(ht,123,&v)); 402c71b3e2SJacob Faibussowitsch PetscTestCheck(v == -1); 41c4762a1bSJed Brown 42*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapISet(ht,123,42)); 43*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 442c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1); 45*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIHas(ht,123,&has)); 462c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 47*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGet(ht,123,&v)); 482c71b3e2SJacob Faibussowitsch PetscTestCheck(v == 42); 49c4762a1bSJed Brown 50*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIDel(ht,123)); 51*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 522c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 53*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIHas(ht,123,&has)); 542c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 55*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGet(ht,123,&v)); 562c71b3e2SJacob Faibussowitsch PetscTestCheck(v == -1); 57c4762a1bSJed Brown 58*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIQuerySet(ht,123,1,&flag)); 592c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 60*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIQuerySet(ht,123,1,&flag)); 612c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 62*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIQueryDel(ht,123,&flag)); 632c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 64*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIQueryDel(ht,123,&flag)); 652c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 66c4762a1bSJed Brown 67*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIResize(ht,13)); 68*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 692c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 70c4762a1bSJed Brown 71*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIClear(ht)); 72*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 732c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 74c4762a1bSJed Brown 75*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapISet(ht,321,24)); 76*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapISet(ht,123,42)); 77*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 782c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2); 79c4762a1bSJed Brown 802f613bf5SBarry Smith koff = 0; keys[0] = keys[1] = 0; 81*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetKeys(ht,&koff,keys)); 82*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(koff,keys)); 832c71b3e2SJacob Faibussowitsch PetscTestCheck(koff == 2); 842c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[0] == 123); 852c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[1] == 321); 86c4762a1bSJed Brown 87c4762a1bSJed Brown voff = 0; vals[0] = vals[1] = 0; 88*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetVals(ht,&voff,vals)); 89*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(voff,vals)); 902c71b3e2SJacob Faibussowitsch PetscTestCheck(voff == 2); 912c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[0] == 24); 922c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[1] == 42); 93c4762a1bSJed Brown 94c4762a1bSJed Brown koff = 0; keys[0] = keys[1] = 0; 95c4762a1bSJed Brown voff = 0; vals[0] = vals[1] = 0; 96*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIDuplicate(ht,&hd)); 97*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetKeys(ht,&koff,keys)); 98*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetVals(ht,&voff,vals)); 99*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(koff,keys)); 100*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(voff,vals)); 1012c71b3e2SJacob Faibussowitsch PetscTestCheck(koff == 2); 1022c71b3e2SJacob Faibussowitsch PetscTestCheck(voff == 2); 1032c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[0] == 123); 1042c71b3e2SJacob Faibussowitsch PetscTestCheck(keys[1] == 321); 1052c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[0] == 24); 1062c71b3e2SJacob Faibussowitsch PetscTestCheck(vals[1] == 42); 107*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIDestroy(&hd)); 108c4762a1bSJed Brown 109*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapISet(ht,0,0)); 110*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 1112c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIReset(ht)); 113*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 1142c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 115*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIReset(ht)); 116*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 1172c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 118*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapISet(ht,0,0)); 119*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 1202c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 121c4762a1bSJed Brown 122*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIDestroy(&ht)); 1232c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL); 124c4762a1bSJed Brown 125*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapICreate(&ht)); 126*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIReset(ht)); 127*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIGetSize(ht,&n)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 129*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIDestroy(&ht)); 130c4762a1bSJed Brown 131*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVCreate(&htv)); 132c4762a1bSJed Brown n = 10; 133*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVResize(htv,n)); 134*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVGetCapacity(htv,&na)); 1352c71b3e2SJacob Faibussowitsch PetscTestCheck(na>=n); 136*5f80ce2aSJacob Faibussowitsch for (i=0; i<n; i++) CHKERRQ(PetscHMapIVSet(htv,i+100,10.)); 137*5f80ce2aSJacob Faibussowitsch 138*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVGetCapacity(htv,&nb)); 1392c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=na); 140*5f80ce2aSJacob Faibussowitsch for (i=0; i<(2*n); i++) CHKERRQ(PetscHMapIVAddValue(htv,i+100,5.)); 141*5f80ce2aSJacob Faibussowitsch 142*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVGetSize(htv,&size)); 1432c71b3e2SJacob Faibussowitsch PetscTestCheck(size==(2*n)); 144*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc3(size,&karray,size,&varray,size,&vwork)); 145c4762a1bSJed Brown off = 0; 146*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVGetPairs(htv,&off,karray,varray)); 1472c71b3e2SJacob Faibussowitsch PetscTestCheck(off==(2*n)); 148*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortIntWithDataArray(off,karray,varray,sizeof(PetscScalar),vwork)); 149c4762a1bSJed Brown for (i=0; i<n; i++) { 1502c71b3e2SJacob Faibussowitsch PetscTestCheck(karray[i]==(i+100)); 1512c71b3e2SJacob Faibussowitsch PetscTestCheck(karray[n+i]==(n+i+100)); 1522c71b3e2SJacob Faibussowitsch PetscTestCheck(varray[i]==15.); 1532c71b3e2SJacob Faibussowitsch PetscTestCheck(varray[n+i]==5.); 154c4762a1bSJed Brown } 155*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree3(karray,varray,vwork)); 156*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHMapIVDestroy(&htv)); 157c4762a1bSJed Brown 158c4762a1bSJed Brown ierr = PetscFinalize(); 159c4762a1bSJed Brown return ierr; 160c4762a1bSJed Brown } 161c4762a1bSJed Brown 162c4762a1bSJed Brown /*TEST 163c4762a1bSJed Brown 164c4762a1bSJed Brown test: 165c4762a1bSJed Brown 166c4762a1bSJed Brown TEST*/ 167