1 static char help[] = "Tests PetscHeapCreate()\n\n"; 2 3 #include <petscsys.h> 4 #include <petscviewer.h> 5 6 int main(int argc,char **args) 7 { 8 PetscErrorCode ierr; 9 PetscHeap h; 10 PetscInt id,val,cnt,*values; 11 12 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 13 CHKERRQ(PetscHeapCreate(9,&h)); 14 CHKERRQ(PetscHeapAdd(h,0,100)); 15 CHKERRQ(PetscHeapAdd(h,1,19)); 16 CHKERRQ(PetscHeapAdd(h,2,36)); 17 CHKERRQ(PetscHeapAdd(h,3,17)); 18 CHKERRQ(PetscHeapAdd(h,4,3)); 19 CHKERRQ(PetscHeapAdd(h,5,25)); 20 CHKERRQ(PetscHeapAdd(h,6,1)); 21 CHKERRQ(PetscHeapAdd(h,8,2)); 22 CHKERRQ(PetscHeapAdd(h,9,7)); 23 CHKERRQ(PetscPrintf(PETSC_COMM_SELF,"Initial heap:\n")); 24 CHKERRQ(PetscHeapView(h,NULL)); 25 26 CHKERRQ(PetscHeapPop(h,&id,&val)); 27 CHKERRQ(PetscHeapStash(h,id,val+10)); 28 CHKERRQ(PetscHeapPop(h,&id,&val)); 29 CHKERRQ(PetscHeapStash(h,id,val+10)); 30 CHKERRQ(PetscPrintf(PETSC_COMM_SELF,"Pop two items, increment, and place in stash:\n")); 31 CHKERRQ(PetscHeapView(h,NULL)); 32 33 CHKERRQ(PetscHeapUnstash(h)); 34 CHKERRQ(PetscPrintf(PETSC_COMM_SELF,"After unpacking the stash:\n")); 35 CHKERRQ(PetscHeapView(h,NULL)); 36 37 CHKERRQ(PetscMalloc1(9,&values)); 38 CHKERRQ(PetscHeapPop(h,&id,&val)); 39 cnt = 0; 40 while (id >= 0) { 41 values[cnt++] = val; 42 CHKERRQ(PetscHeapPop(h,&id,&val)); 43 } 44 CHKERRQ(PetscPrintf(PETSC_COMM_SELF,"Sorted values:\n")); 45 CHKERRQ(PetscIntView(cnt,values,PETSC_VIEWER_STDOUT_SELF)); 46 CHKERRQ(PetscFree(values)); 47 CHKERRQ(PetscHeapDestroy(&h)); 48 ierr = PetscFinalize(); 49 return ierr; 50 } 51 52 /*TEST 53 54 test: 55 56 TEST*/ 57