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