1c4762a1bSJed Brown static char help[] = "Test PETSc integer hash set.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petsc/private/hashseti.h> 4c4762a1bSJed Brown #include <petscsys.h> 5c4762a1bSJed Brown 62c71b3e2SJacob Faibussowitsch #define PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB,"Assertion: `%s' failed.",PetscStringize(expr)) 7c4762a1bSJed Brown 8c4762a1bSJed Brown int main(int argc,char **argv) 9c4762a1bSJed Brown { 10c4762a1bSJed Brown PetscHSetI ht = NULL, hd; 11c4762a1bSJed Brown PetscInt n, off, array[4],na,nb,i,*marray,size; 12c4762a1bSJed Brown PetscBool has, flag; 13c4762a1bSJed Brown 14*9566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,NULL,help)); 15c4762a1bSJed Brown 16*9566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht)); 172c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL); 18*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 192c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 20c4762a1bSJed Brown 21*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht,0)); 22*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 232c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 24c4762a1bSJed Brown 25*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht,42,&has)); 262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 27c4762a1bSJed Brown 28*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,42)); 29*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 302c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1); 31*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht,42,&has)); 322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 33c4762a1bSJed Brown 34*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht,42)); 35*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 362c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 37*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIHas(ht,42,&has)); 382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 39*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht,42)); 40*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDel(ht,24)); 41c4762a1bSJed Brown 42*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryAdd(ht,123,&flag)); 432c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 44*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryAdd(ht,123,&flag)); 452c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 46*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryDel(ht,123,&flag)); 472c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 48*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIQueryDel(ht,123,&flag)); 492c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 50c4762a1bSJed Brown 51*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht,13)); 52*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 532c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 54c4762a1bSJed Brown 55*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIClear(ht)); 56*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 572c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 58c4762a1bSJed Brown 59*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,42)); 60*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,13)); 61*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 622c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2); 63c4762a1bSJed Brown 64c4762a1bSJed Brown off = 0; 65*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht,&off,array)); 66*9566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off,array)); 672c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 682c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 692c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 70*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht,&off,array)); 71*9566063dSJacob Faibussowitsch PetscCall(PetscSortInt(2,array+2)); 722c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 4); 732c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 742c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 752c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 762c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 77c4762a1bSJed Brown 78c4762a1bSJed Brown off = 0; 79*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDuplicate(ht,&hd)); 80*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(hd,&off,array)); 81*9566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off,array)); 822c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 832c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 842c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 85*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&hd)); 86c4762a1bSJed Brown 87*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,0)); 88*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 892c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 90*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht)); 91*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 922c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 93*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht)); 94*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 952c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 96*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,0)); 97*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 982c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 99c4762a1bSJed Brown 100*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht)); 1012c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL); 102c4762a1bSJed Brown 103*9566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht)); 104*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIReset(ht)); 105*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&n)); 1062c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 107*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht)); 108c4762a1bSJed Brown 109*9566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&ht)); 110*9566063dSJacob Faibussowitsch PetscCall(PetscHSetICreate(&hd)); 111c4762a1bSJed Brown n = 10; 112*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(ht,n)); 113*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIResize(hd,n)); 114*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(ht,&na)); 115*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(hd,&nb)); 1162c71b3e2SJacob Faibussowitsch PetscTestCheck(na>=n); 1172c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=n); 118c4762a1bSJed Brown for (i=0; i<n; i++) { 119*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(ht,i+1)); 120*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIAdd(hd,i+1+n)); 121c4762a1bSJed Brown } 122*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetCapacity(ht,&nb)); 1232c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=na); 124c4762a1bSJed Brown /* Merge ht and hd, and the result is in ht */ 125*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIUpdate(ht,hd)); 126*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&hd)); 127*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetSize(ht,&size)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(size==(2*n)); 129*9566063dSJacob Faibussowitsch PetscCall(PetscMalloc1(n*2,&marray)); 130c4762a1bSJed Brown off = 0; 131*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIGetElems(ht,&off,marray)); 132*9566063dSJacob Faibussowitsch PetscCall(PetscHSetIDestroy(&ht)); 1332c71b3e2SJacob Faibussowitsch PetscTestCheck(off==(2*n)); 134*9566063dSJacob Faibussowitsch PetscCall(PetscSortInt(off,marray)); 135c4762a1bSJed Brown for (i=0; i<n; i++) { 1362c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[i]==(i+1)); 1372c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[n+i]==(i+1+n)); 138c4762a1bSJed Brown } 139*9566063dSJacob Faibussowitsch PetscCall(PetscFree(marray)); 140c4762a1bSJed Brown 141*9566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 142b122ec5aSJacob Faibussowitsch return 0; 143c4762a1bSJed Brown } 144c4762a1bSJed Brown 145c4762a1bSJed Brown /*TEST 146c4762a1bSJed Brown 147c4762a1bSJed Brown test: 148c4762a1bSJed Brown 149c4762a1bSJed Brown TEST*/ 150