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