1 static char help[] = "Test PETSc integer hash set.\n\n"; 2 3 #include <petsc/private/hashseti.h> 4 #include <petscsys.h> 5 6 #define PetscAssert(expr) do { \ 7 if (PetscUnlikely(!(expr))) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_LIB, "Assertion: `%s' failed.", PetscStringize(expr)); \ 8 } while (0) 9 10 int main(int argc,char **argv) 11 { 12 PetscHSetI ht = NULL, hd; 13 PetscInt n, off, array[4],na,nb,i,*marray,size; 14 PetscBool has, flag; 15 PetscErrorCode ierr; 16 17 ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 18 19 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 20 PetscAssert(ht != NULL); 21 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 22 PetscAssert(n == 0); 23 24 ierr = PetscHSetIResize(ht,0);CHKERRQ(ierr); 25 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 26 PetscAssert(n == 0); 27 28 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 29 PetscAssert(has == PETSC_FALSE); 30 31 ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr); 32 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 33 PetscAssert(n == 1); 34 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 35 PetscAssert(has == PETSC_TRUE); 36 37 ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr); 38 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 39 PetscAssert(n == 0); 40 ierr = PetscHSetIHas(ht,42,&has);CHKERRQ(ierr); 41 PetscAssert(has == PETSC_FALSE); 42 ierr = PetscHSetIDel(ht,42);CHKERRQ(ierr); 43 ierr = PetscHSetIDel(ht,24);CHKERRQ(ierr); 44 45 ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr); 46 PetscAssert(flag == PETSC_TRUE); 47 ierr = PetscHSetIQueryAdd(ht,123,&flag);CHKERRQ(ierr); 48 PetscAssert(flag == PETSC_FALSE); 49 ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr); 50 PetscAssert(flag == PETSC_TRUE); 51 ierr = PetscHSetIQueryDel(ht,123,&flag);CHKERRQ(ierr); 52 PetscAssert(flag == PETSC_FALSE); 53 54 ierr = PetscHSetIResize(ht,13);CHKERRQ(ierr); 55 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 56 PetscAssert(n == 0); 57 58 ierr = PetscHSetIClear(ht);CHKERRQ(ierr); 59 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 60 PetscAssert(n == 0); 61 62 ierr = PetscHSetIAdd(ht,42);CHKERRQ(ierr); 63 ierr = PetscHSetIAdd(ht,13);CHKERRQ(ierr); 64 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 65 PetscAssert(n == 2); 66 67 off = 0; 68 ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr); 69 ierr = PetscSortInt(off,array);CHKERRQ(ierr); 70 PetscAssert(off == 2); 71 PetscAssert(array[0] == 13); 72 PetscAssert(array[1] == 42); 73 ierr = PetscHSetIGetElems(ht,&off,array);CHKERRQ(ierr); 74 ierr = PetscSortInt(2,array+2);CHKERRQ(ierr); 75 PetscAssert(off == 4); 76 PetscAssert(array[0] == 13); 77 PetscAssert(array[1] == 42); 78 PetscAssert(array[0] == 13); 79 PetscAssert(array[1] == 42); 80 81 off = 0; 82 ierr = PetscHSetIDuplicate(ht,&hd);CHKERRQ(ierr); 83 ierr = PetscHSetIGetElems(hd,&off,array);CHKERRQ(ierr); 84 ierr = PetscSortInt(off,array);CHKERRQ(ierr); 85 PetscAssert(off == 2); 86 PetscAssert(array[0] == 13); 87 PetscAssert(array[1] == 42); 88 ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr); 89 90 ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr); 91 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 92 PetscAssert(n != 0); 93 ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 94 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 95 PetscAssert(n == 0); 96 ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 97 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 98 PetscAssert(n == 0); 99 ierr = PetscHSetIAdd(ht,0);CHKERRQ(ierr); 100 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 101 PetscAssert(n != 0); 102 103 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 104 PetscAssert(ht == NULL); 105 106 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 107 ierr = PetscHSetIReset(ht);CHKERRQ(ierr); 108 ierr = PetscHSetIGetSize(ht,&n);CHKERRQ(ierr); 109 PetscAssert(n == 0); 110 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 111 112 ierr = PetscHSetICreate(&ht);CHKERRQ(ierr); 113 ierr = PetscHSetICreate(&hd);CHKERRQ(ierr); 114 n = 10; 115 ierr = PetscHSetIResize(ht,n);CHKERRQ(ierr); 116 ierr = PetscHSetIResize(hd,n);CHKERRQ(ierr); 117 ierr = PetscHSetIGetCapacity(ht,&na);CHKERRQ(ierr); 118 ierr = PetscHSetIGetCapacity(hd,&nb);CHKERRQ(ierr); 119 PetscAssert(na>=n); 120 PetscAssert(nb>=n); 121 for (i=0; i<n; i++) { 122 ierr = PetscHSetIAdd(ht,i+1);CHKERRQ(ierr); 123 ierr = PetscHSetIAdd(hd,i+1+n);CHKERRQ(ierr); 124 } 125 ierr = PetscHSetIGetCapacity(ht,&nb);CHKERRQ(ierr); 126 PetscAssert(nb>=na); 127 /* Merge ht and hd, and the result is in ht */ 128 ierr = PetscHSetIUpdate(ht,hd);CHKERRQ(ierr); 129 ierr = PetscHSetIDestroy(&hd);CHKERRQ(ierr); 130 ierr = PetscHSetIGetSize(ht,&size);CHKERRQ(ierr); 131 PetscAssert(size==(2*n)); 132 ierr = PetscMalloc1(n*2,&marray);CHKERRQ(ierr); 133 off = 0; 134 ierr = PetscHSetIGetElems(ht,&off,marray);CHKERRQ(ierr); 135 ierr = PetscHSetIDestroy(&ht);CHKERRQ(ierr); 136 PetscAssert(off==(2*n)); 137 ierr = PetscSortInt(off,marray);CHKERRQ(ierr); 138 for (i=0; i<n; i++) { 139 PetscAssert(marray[i]==(i+1)); 140 PetscAssert(marray[n+i]==(i+1+n)); 141 } 142 ierr = PetscFree(marray);CHKERRQ(ierr); 143 144 ierr = PetscFinalize(); 145 return ierr; 146 } 147 148 /*TEST 149 150 test: 151 152 TEST*/ 153