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