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*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc,&argv,NULL,help)); 15c4762a1bSJed Brown 165f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetICreate(&ht)); 172c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL); 185f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 192c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 20c4762a1bSJed Brown 215f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIResize(ht,0)); 225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 232c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 24c4762a1bSJed Brown 255f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIHas(ht,42,&has)); 262c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 27c4762a1bSJed Brown 285f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,42)); 295f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 302c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1); 315f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIHas(ht,42,&has)); 322c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 33c4762a1bSJed Brown 345f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDel(ht,42)); 355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 362c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 375f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIHas(ht,42,&has)); 382c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDel(ht,42)); 405f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDel(ht,24)); 41c4762a1bSJed Brown 425f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIQueryAdd(ht,123,&flag)); 432c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 445f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIQueryAdd(ht,123,&flag)); 452c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 465f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIQueryDel(ht,123,&flag)); 472c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 485f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIQueryDel(ht,123,&flag)); 492c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 50c4762a1bSJed Brown 515f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIResize(ht,13)); 525f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 532c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 54c4762a1bSJed Brown 555f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIClear(ht)); 565f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 572c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 58c4762a1bSJed Brown 595f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,42)); 605f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,13)); 615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 622c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2); 63c4762a1bSJed Brown 64c4762a1bSJed Brown off = 0; 655f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetElems(ht,&off,array)); 665f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(off,array)); 672c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 682c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 692c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 705f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetElems(ht,&off,array)); 715f80ce2aSJacob Faibussowitsch CHKERRQ(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; 795f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDuplicate(ht,&hd)); 805f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetElems(hd,&off,array)); 815f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSortInt(off,array)); 822c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 832c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 842c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 855f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDestroy(&hd)); 86c4762a1bSJed Brown 875f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,0)); 885f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 892c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 905f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIReset(ht)); 915f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 922c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 935f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIReset(ht)); 945f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 952c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 965f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,0)); 975f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 982c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 99c4762a1bSJed Brown 1005f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDestroy(&ht)); 1012c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL); 102c4762a1bSJed Brown 1035f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetICreate(&ht)); 1045f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIReset(ht)); 1055f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&n)); 1062c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 1075f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDestroy(&ht)); 108c4762a1bSJed Brown 1095f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetICreate(&ht)); 1105f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetICreate(&hd)); 111c4762a1bSJed Brown n = 10; 1125f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIResize(ht,n)); 1135f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIResize(hd,n)); 1145f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetCapacity(ht,&na)); 1155f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetCapacity(hd,&nb)); 1162c71b3e2SJacob Faibussowitsch PetscTestCheck(na>=n); 1172c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=n); 118c4762a1bSJed Brown for (i=0; i<n; i++) { 1195f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(ht,i+1)); 1205f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIAdd(hd,i+1+n)); 121c4762a1bSJed Brown } 1225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetCapacity(ht,&nb)); 1232c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=na); 124c4762a1bSJed Brown /* Merge ht and hd, and the result is in ht */ 1255f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIUpdate(ht,hd)); 1265f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDestroy(&hd)); 1275f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetSize(ht,&size)); 1282c71b3e2SJacob Faibussowitsch PetscTestCheck(size==(2*n)); 1295f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(n*2,&marray)); 130c4762a1bSJed Brown off = 0; 1315f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIGetElems(ht,&off,marray)); 1325f80ce2aSJacob Faibussowitsch CHKERRQ(PetscHSetIDestroy(&ht)); 1332c71b3e2SJacob Faibussowitsch PetscTestCheck(off==(2*n)); 1345f80ce2aSJacob Faibussowitsch CHKERRQ(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 } 1395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(marray)); 140c4762a1bSJed Brown 141*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 142*b122ec5aSJacob Faibussowitsch return 0; 143c4762a1bSJed Brown } 144c4762a1bSJed Brown 145c4762a1bSJed Brown /*TEST 146c4762a1bSJed Brown 147c4762a1bSJed Brown test: 148c4762a1bSJed Brown 149c4762a1bSJed Brown TEST*/ 150