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