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