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