xref: /petsc/src/mat/tests/ex29.c (revision 40badf4fbc550ac1f60bd080eaff6de6d55b946d)
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