xref: /petsc/src/sys/tests/ex12.c (revision a4e35b1925eceef64945ea472b84f2bf06a67b5e)
1 
2 static char help[] = "Tests timing PetscSortInt().\n\n";
3 
4 #include <petscsys.h>
5 
6 int main(int argc, char **argv)
7 {
8   PetscInt      i, n = 1000, *values;
9   PetscLogEvent event;
10   PetscRandom   rand;
11   PetscReal     value;
12   PetscBool     values_view = PETSC_FALSE;
13   PetscMPIInt   rank;
14 
15   PetscFunctionBeginUser;
16   PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
17   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
18   PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL));
19   PetscCall(PetscOptionsGetBool(NULL, 0, "-values_view", &values_view, NULL));
20 
21   PetscCall(PetscRandomCreate(PETSC_COMM_SELF, &rand));
22   PetscCall(PetscRandomSetFromOptions(rand));
23 
24   PetscCall(PetscMalloc1(n, &values));
25   for (i = 0; i < n; i++) {
26     PetscCall(PetscRandomGetValueReal(rand, &value));
27     values[i] = (PetscInt)(n * value + 2.0);
28   }
29   PetscCall(PetscSortInt(n, values));
30 
31   PetscCall(PetscLogEventRegister("Sort", 0, &event));
32   PetscCall(PetscLogEventBegin(event, 0, 0, 0, 0));
33 
34   for (i = 0; i < n; i++) {
35     PetscCall(PetscRandomGetValueReal(rand, &value));
36     values[i] = (PetscInt)(n * value + 2.0);
37   }
38   PetscCall(PetscSortInt(n, values));
39   PetscCall(PetscLogEventEnd(event, 0, 0, 0, 0));
40 
41   for (i = 1; i < n; i++) {
42     PetscCheck(values[i] >= values[i - 1], PETSC_COMM_SELF, PETSC_ERR_PLIB, "Values not sorted");
43     if (values_view && rank == 0) PetscCall(PetscPrintf(PETSC_COMM_SELF, "%" PetscInt_FMT " %" PetscInt_FMT "\n", i, values[i]));
44   }
45   PetscCall(PetscFree(values));
46   PetscCall(PetscRandomDestroy(&rand));
47 
48   PetscCall(PetscFinalize());
49   return 0;
50 }
51 
52 /*TEST
53 
54    test:
55       args: -values_view
56 
57 TEST*/
58