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