static char help[] = "Test PETSc integer hash set.\n\n"; #include #include #define PetscTestCheck(expr) PetscCheck(expr,PETSC_COMM_SELF,PETSC_ERR_LIB,"Assertion: `%s' failed.",PetscStringize(expr)) int main(int argc,char **argv) { PetscHSetI ht = NULL, hd; PetscInt n, off, array[4],na,nb,i,*marray,size; PetscBool has, flag; PetscFunctionBeginUser; PetscCall(PetscInitialize(&argc,&argv,NULL,help)); PetscCall(PetscHSetICreate(&ht)); PetscTestCheck(ht != NULL); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIResize(ht,0)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIHas(ht,42,&has)); PetscTestCheck(has == PETSC_FALSE); PetscCall(PetscHSetIAdd(ht,42)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 1); PetscCall(PetscHSetIHas(ht,42,&has)); PetscTestCheck(has == PETSC_TRUE); PetscCall(PetscHSetIDel(ht,42)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIHas(ht,42,&has)); PetscTestCheck(has == PETSC_FALSE); PetscCall(PetscHSetIDel(ht,42)); PetscCall(PetscHSetIDel(ht,24)); PetscCall(PetscHSetIQueryAdd(ht,123,&flag)); PetscTestCheck(flag == PETSC_TRUE); PetscCall(PetscHSetIQueryAdd(ht,123,&flag)); PetscTestCheck(flag == PETSC_FALSE); PetscCall(PetscHSetIQueryDel(ht,123,&flag)); PetscTestCheck(flag == PETSC_TRUE); PetscCall(PetscHSetIQueryDel(ht,123,&flag)); PetscTestCheck(flag == PETSC_FALSE); PetscCall(PetscHSetIResize(ht,13)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIClear(ht)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIAdd(ht,42)); PetscCall(PetscHSetIAdd(ht,13)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 2); off = 0; PetscCall(PetscHSetIGetElems(ht,&off,array)); PetscCall(PetscSortInt(off,array)); PetscTestCheck(off == 2); PetscTestCheck(array[0] == 13); PetscTestCheck(array[1] == 42); PetscCall(PetscHSetIGetElems(ht,&off,array)); PetscCall(PetscSortInt(2,array+2)); PetscTestCheck(off == 4); PetscTestCheck(array[0] == 13); PetscTestCheck(array[1] == 42); PetscTestCheck(array[0] == 13); PetscTestCheck(array[1] == 42); off = 0; PetscCall(PetscHSetIDuplicate(ht,&hd)); PetscCall(PetscHSetIGetElems(hd,&off,array)); PetscCall(PetscSortInt(off,array)); PetscTestCheck(off == 2); PetscTestCheck(array[0] == 13); PetscTestCheck(array[1] == 42); PetscCall(PetscHSetIDestroy(&hd)); PetscCall(PetscHSetIAdd(ht,0)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n != 0); PetscCall(PetscHSetIReset(ht)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIReset(ht)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIAdd(ht,0)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n != 0); PetscCall(PetscHSetIDestroy(&ht)); PetscTestCheck(ht == NULL); PetscCall(PetscHSetICreate(&ht)); PetscCall(PetscHSetIReset(ht)); PetscCall(PetscHSetIGetSize(ht,&n)); PetscTestCheck(n == 0); PetscCall(PetscHSetIDestroy(&ht)); PetscCall(PetscHSetICreate(&ht)); PetscCall(PetscHSetICreate(&hd)); n = 10; PetscCall(PetscHSetIResize(ht,n)); PetscCall(PetscHSetIResize(hd,n)); PetscCall(PetscHSetIGetCapacity(ht,&na)); PetscCall(PetscHSetIGetCapacity(hd,&nb)); PetscTestCheck(na>=n); PetscTestCheck(nb>=n); for (i=0; i=na); /* Merge ht and hd, and the result is in ht */ PetscCall(PetscHSetIUpdate(ht,hd)); PetscCall(PetscHSetIDestroy(&hd)); PetscCall(PetscHSetIGetSize(ht,&size)); PetscTestCheck(size==(2*n)); PetscCall(PetscMalloc1(n*2,&marray)); off = 0; PetscCall(PetscHSetIGetElems(ht,&off,marray)); PetscCall(PetscHSetIDestroy(&ht)); PetscTestCheck(off==(2*n)); PetscCall(PetscSortInt(off,marray)); for (i=0; i