Actual source code: ex29.c
1: static char help[] = "Tests PetscHeapCreate()\n\n";
3: #include <petscsys.h>
4: #include <petscviewer.h>
6: int main(int argc, char **args)
7: {
8: PetscHeap h;
9: PetscInt id, val, cnt, *values;
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));
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));
33: PetscCall(PetscHeapUnstash(h));
34: PetscCall(PetscPrintf(PETSC_COMM_SELF, "After unpacking the stash:\n"));
35: PetscCall(PetscHeapView(h, NULL));
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: }
52: /*TEST
54: test:
56: TEST*/