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 6*2c71b3e2SJacob 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 PetscErrorCode ierr; 14c4762a1bSJed Brown 15c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 16c4762a1bSJed Brown 17c4762a1bSJed Brown ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 18*2c71b3e2SJacob Faibussowitsch PetscTestCheck(ht != NULL); 19c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 20*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 21c4762a1bSJed Brown 22c4762a1bSJed Brown ierr = PetscHSetIResize(ht,0);CHKERRQ(ierr); 23c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 24*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 25c4762a1bSJed Brown 26c4762a1bSJed Brown ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 27*2c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 28c4762a1bSJed Brown 29c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr); 30c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 31*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 1); 32c4762a1bSJed Brown ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 33*2c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_TRUE); 34c4762a1bSJed Brown 35c4762a1bSJed Brown ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr); 36c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 37*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 38c4762a1bSJed Brown ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 39*2c71b3e2SJacob Faibussowitsch PetscTestCheck(has == PETSC_FALSE); 40c4762a1bSJed Brown ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr); 41c4762a1bSJed Brown ierr = PetscHSetIDel(ht,24);CHKERRQ(ierr); 42c4762a1bSJed Brown 43c4762a1bSJed Brown ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr); 44*2c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 45c4762a1bSJed Brown ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr); 46*2c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 47c4762a1bSJed Brown ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr); 48*2c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_TRUE); 49c4762a1bSJed Brown ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr); 50*2c71b3e2SJacob Faibussowitsch PetscTestCheck(flag == PETSC_FALSE); 51c4762a1bSJed Brown 52c4762a1bSJed Brown ierr = PetscHSetIResize(ht,13);CHKERRQ(ierr); 53c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 54*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 55c4762a1bSJed Brown 56c4762a1bSJed Brown ierr = PetscHSetIClear(ht);CHKERRQ(ierr); 57c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 58*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 59c4762a1bSJed Brown 60c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr); 61c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,13);CHKERRQ(ierr); 62c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 63*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 2); 64c4762a1bSJed Brown 65c4762a1bSJed Brown off = 0; 66c4762a1bSJed Brown ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr); 67c4762a1bSJed Brown ierr = PetscSortInt(off,array);CHKERRQ(ierr); 68*2c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 69*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 70*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 71c4762a1bSJed Brown ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr); 72c4762a1bSJed Brown ierr = PetscSortInt(2,array+2);CHKERRQ(ierr); 73*2c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 4); 74*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 75*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 76*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 77*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 78c4762a1bSJed Brown 79c4762a1bSJed Brown off = 0; 80c4762a1bSJed Brown ierr = PetscHSetIDuplicate(ht,&hd);CHKERRQ(ierr); 81c4762a1bSJed Brown ierr = PetscHSetIGetElems(hd,&off,array);CHKERRQ(ierr); 82c4762a1bSJed Brown ierr = PetscSortInt(off,array);CHKERRQ(ierr); 83*2c71b3e2SJacob Faibussowitsch PetscTestCheck(off == 2); 84*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[0] == 13); 85*2c71b3e2SJacob Faibussowitsch PetscTestCheck(array[1] == 42); 86c4762a1bSJed Brown ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr); 87c4762a1bSJed Brown 88c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr); 89c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 90*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 91c4762a1bSJed Brown ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 92c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 93*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 94c4762a1bSJed Brown ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 95c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 96*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 97c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr); 98c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 99*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n != 0); 100c4762a1bSJed Brown 101c4762a1bSJed Brown ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 102*2c71b3e2SJacob Faibussowitsch PetscTestCheck(ht == NULL); 103c4762a1bSJed Brown 104c4762a1bSJed Brown ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 105c4762a1bSJed Brown ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 106c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 107*2c71b3e2SJacob Faibussowitsch PetscTestCheck(n == 0); 108c4762a1bSJed Brown ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 109c4762a1bSJed Brown 110c4762a1bSJed Brown ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 111c4762a1bSJed Brown ierr = PetscHSetICreate(&hd);CHKERRQ(ierr); 112c4762a1bSJed Brown n = 10; 113c4762a1bSJed Brown ierr = PetscHSetIResize(ht,n);CHKERRQ(ierr); 114c4762a1bSJed Brown ierr = PetscHSetIResize(hd,n);CHKERRQ(ierr); 115c4762a1bSJed Brown ierr = PetscHSetIGetCapacity(ht,&na);CHKERRQ(ierr); 116c4762a1bSJed Brown ierr = PetscHSetIGetCapacity(hd,&nb);CHKERRQ(ierr); 117*2c71b3e2SJacob Faibussowitsch PetscTestCheck(na>=n); 118*2c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=n); 119c4762a1bSJed Brown for (i=0; i<n; i++) { 120c4762a1bSJed Brown ierr = PetscHSetIAdd(ht,i+1);CHKERRQ(ierr); 121c4762a1bSJed Brown ierr = PetscHSetIAdd(hd,i+1+n);CHKERRQ(ierr); 122c4762a1bSJed Brown } 123c4762a1bSJed Brown ierr = PetscHSetIGetCapacity(ht,&nb);CHKERRQ(ierr); 124*2c71b3e2SJacob Faibussowitsch PetscTestCheck(nb>=na); 125c4762a1bSJed Brown /* Merge ht and hd, and the result is in ht */ 126c4762a1bSJed Brown ierr = PetscHSetIUpdate(ht,hd);CHKERRQ(ierr); 127c4762a1bSJed Brown ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr); 128c4762a1bSJed Brown ierr = PetscHSetIGetSize(ht,&size);CHKERRQ(ierr); 129*2c71b3e2SJacob Faibussowitsch PetscTestCheck(size==(2*n)); 130c4762a1bSJed Brown ierr = PetscMalloc1(n*2,&marray);CHKERRQ(ierr); 131c4762a1bSJed Brown off = 0; 132c4762a1bSJed Brown ierr = PetscHSetIGetElems(ht,&off,marray);CHKERRQ(ierr); 133c4762a1bSJed Brown ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 134*2c71b3e2SJacob Faibussowitsch PetscTestCheck(off==(2*n)); 135c4762a1bSJed Brown ierr = PetscSortInt(off,marray);CHKERRQ(ierr); 136c4762a1bSJed Brown for (i=0; i<n; i++) { 137*2c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[i]==(i+1)); 138*2c71b3e2SJacob Faibussowitsch PetscTestCheck(marray[n+i]==(i+1+n)); 139c4762a1bSJed Brown } 140c4762a1bSJed Brown ierr = PetscFree(marray);CHKERRQ(ierr); 141c4762a1bSJed Brown 142c4762a1bSJed Brown ierr = PetscFinalize(); 143c4762a1bSJed Brown return ierr; 144c4762a1bSJed Brown } 145c4762a1bSJed Brown 146c4762a1bSJed Brown /*TEST 147c4762a1bSJed Brown 148c4762a1bSJed Brown test: 149c4762a1bSJed Brown 150c4762a1bSJed Brown TEST*/ 151