GCC Code Coverage Report


Directory: ./
File: src/sys/classes/ds/tests/test19.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 51 51 100.0%
Functions: 1 1 100.0%
Branches: 112 174 64.4%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10
11 static char help[] = "Test DSSortWithPermutation() on a NHEP.\n\n";
12
13 #include <slepcds.h>
14
15 10 int main(int argc,char **argv)
16 {
17 10 DS ds;
18 10 SlepcSC sc;
19 10 PetscScalar *A,*wr,*wi;
20 10 PetscReal re,im;
21 10 PetscInt i,j,n=12,*perm;
22
23
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBeginUser;
24
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
25
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
26
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Solve a Dense System of type NHEP - dimension %" PetscInt_FMT ".\n",n));
27
28 /* Create DS object */
29
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSCreate(PETSC_COMM_WORLD,&ds));
30
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSetType(ds,DSNHEP));
31
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSetFromOptions(ds));
32
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSAllocate(ds,n));
33
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSetDimensions(ds,n,0,0));
34
35 /* Fill with Grcar matrix */
36
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSGetArray(ds,DS_MAT_A,&A));
37
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
120 for (i=1;i<n;i++) A[i+(i-1)*n]=-1.0;
38
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
50 for (j=0;j<4;j++) {
39
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
460 for (i=0;i<n-j;i++) A[i+(i+j)*n]=1.0;
40 }
41
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSRestoreArray(ds,DS_MAT_A,&A));
42
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSetState(ds,DS_STATE_INTERMEDIATE));
43
44 /* Solve */
45
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscMalloc3(n,&wr,n,&wi,n,&perm));
46
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSGetSlepcSC(ds,&sc));
47 10 sc->comparison = SlepcCompareLargestMagnitude;
48 10 sc->comparisonctx = NULL;
49 10 sc->map = NULL;
50 10 sc->mapobj = NULL;
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSolve(ds,wr,wi));
52
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSort(ds,wr,wi,NULL,NULL,NULL));
53
54 /* Print eigenvalues */
55
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Computed eigenvalues =\n"));
56
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
130 for (i=0;i<n;i++) {
57 #if defined(PETSC_USE_COMPLEX)
58 60 re = PetscRealPart(wr[i]);
59 60 im = PetscImaginaryPart(wr[i]);
60 #else
61 60 re = wr[i];
62 60 im = wi[i];
63 #endif
64
3/10
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
120 if (PetscAbs(im)<1e-10) PetscCall(PetscPrintf(PETSC_COMM_WORLD," %.5f\n",(double)re));
65
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 else PetscCall(PetscPrintf(PETSC_COMM_WORLD," %.5f%+.5fi\n",(double)re,(double)im));
66 }
67
68 /* Reorder eigenvalues */
69
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
70 for (i=0;i<n/2;i++) perm[i] = n/2+i;
70
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
70 for (i=0;i<n/2;i++) perm[i+n/2] = i;
71
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSSortWithPermutation(ds,perm,wr,wi));
72
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Reordered eigenvalues =\n"));
73
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
130 for (i=0;i<n;i++) {
74 #if defined(PETSC_USE_COMPLEX)
75 60 re = PetscRealPart(wr[i]);
76 60 im = PetscImaginaryPart(wr[i]);
77 #else
78 60 re = wr[i];
79 60 im = wi[i];
80 #endif
81
3/10
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
120 if (PetscAbs(im)<1e-10) PetscCall(PetscPrintf(PETSC_COMM_WORLD," %.5f\n",(double)re));
82
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
120 else PetscCall(PetscPrintf(PETSC_COMM_WORLD," %.5f%+.5fi\n",(double)re,(double)im));
83 }
84
85
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(PetscFree3(wr,wi,perm));
86
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(DSDestroy(&ds));
87
3/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
10 PetscCall(SlepcFinalize());
88 return 0;
89 }
90
91 /*TEST
92
93 test:
94 suffix: 1
95 filter: sed -e "s/[+-]\([0-9]\.[0-9]*i\)/+-\\1/" | sed -e "s/2.16612/2.16613/"
96
97 TEST*/
98