GCC Code Coverage Report


Directory: ./
File: src/sys/classes/fn/tests/test7.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 95 99 96.0%
Functions: 2 2 100.0%
Branches: 279 460 60.7%

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 matrix square root.\n\n";
12
13 #include <slepcfn.h>
14
15 /*
16 Compute matrix square root B = sqrtm(A)
17 Check result as norm(B*B-A)
18 */
19 456 PetscErrorCode TestMatSqrt(FN fn,Mat A,PetscViewer viewer,PetscBool verbose,PetscBool inplace)
20 {
21 456 PetscScalar tau,eta;
22 456 PetscReal nrm;
23 456 PetscBool set,flg;
24 456 PetscInt n;
25 456 Mat S,R,Acopy;
26 456 Vec v,f0;
27
28
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
456 PetscFunctionBeginUser;
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.
456 PetscCall(MatGetSize(A,&n,NULL));
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.
456 PetscCall(MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,&S));
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.
456 PetscCall(PetscObjectSetName((PetscObject)S,"S"));
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.
456 PetscCall(FNGetScale(fn,&tau,&eta));
33 /* compute square root */
34
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
456 if (inplace) {
35
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.
228 PetscCall(MatCopy(A,S,SAME_NONZERO_PATTERN));
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.
228 PetscCall(MatIsHermitianKnown(A,&set,&flg));
37
7/10
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
228 if (set && flg) PetscCall(MatSetOption(S,MAT_HERMITIAN,PETSC_TRUE));
38
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.
228 PetscCall(FNEvaluateFunctionMat(fn,S,NULL));
39 } else {
40
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.
228 PetscCall(MatDuplicate(A,MAT_COPY_VALUES,&Acopy));
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.
228 PetscCall(FNEvaluateFunctionMat(fn,A,S));
42 /* check that A has not been modified */
43
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.
228 PetscCall(MatAXPY(Acopy,-1.0,A,SAME_NONZERO_PATTERN));
44
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.
228 PetscCall(MatNorm(Acopy,NORM_1,&nrm));
45
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
228 if (nrm>100*PETSC_MACHINE_EPSILON) PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Warning: the input matrix has changed by %g\n",(double)nrm));
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.
228 PetscCall(MatDestroy(&Acopy));
47 }
48
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
456 if (verbose) {
49 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Matrix A - - - - - - - -\n"));
50 PetscCall(MatView(A,viewer));
51 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Computed sqrtm(A) - - - - - - -\n"));
52 PetscCall(MatView(S,viewer));
53 }
54 /* check error ||S*S-A||_F */
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.
456 PetscCall(MatMatMult(S,S,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&R));
56
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
456 if (eta!=1.0) PetscCall(MatScale(R,1.0/(eta*eta)));
57
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.
456 PetscCall(MatAXPY(R,-tau,A,SAME_NONZERO_PATTERN));
58
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.
456 PetscCall(MatNorm(R,NORM_FROBENIUS,&nrm));
59
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
456 if (nrm<100*PETSC_MACHINE_EPSILON) PetscCall(PetscPrintf(PETSC_COMM_WORLD,"||S*S-A||_F < 100*eps\n"));
60
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.
40 else PetscCall(PetscPrintf(PETSC_COMM_WORLD,"||S*S-A||_F = %g\n",(double)nrm));
61 /* check FNEvaluateFunctionMatVec() */
62
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.
456 PetscCall(MatCreateVecs(A,&v,&f0));
63
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.
456 PetscCall(MatGetColumnVector(S,f0,0));
64
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.
456 PetscCall(FNEvaluateFunctionMatVec(fn,A,v));
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.
456 PetscCall(VecAXPY(v,-1.0,f0));
66
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.
456 PetscCall(VecNorm(v,NORM_2,&nrm));
67
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
456 if (nrm>100*PETSC_MACHINE_EPSILON) PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Warning: the norm of f(A)*e_1-v is %g\n",(double)nrm));
68
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.
456 PetscCall(MatDestroy(&S));
69
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.
456 PetscCall(MatDestroy(&R));
70
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.
456 PetscCall(VecDestroy(&v));
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.
456 PetscCall(VecDestroy(&f0));
72
5/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
84 PetscFunctionReturn(PETSC_SUCCESS);
73 }
74
75 152 int main(int argc,char **argv)
76 {
77 152 FN fn;
78 152 Mat A=NULL;
79 152 PetscInt i,j,n=10;
80 152 PetscScalar *As;
81 152 PetscViewer viewer;
82 152 PetscBool verbose,inplace,matcuda;
83 152 PetscRandom myrand;
84 152 PetscReal v;
85
86
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
152 PetscFunctionBeginUser;
87
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.
152 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
88
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.
152 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
89
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.
152 PetscCall(PetscOptionsHasName(NULL,NULL,"-verbose",&verbose));
90
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.
152 PetscCall(PetscOptionsHasName(NULL,NULL,"-inplace",&inplace));
91
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.
152 PetscCall(PetscOptionsHasName(NULL,NULL,"-matcuda",&matcuda));
92
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.
152 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Matrix square root, n=%" PetscInt_FMT ".\n",n));
93
94 /* Create function object */
95
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.
152 PetscCall(FNCreate(PETSC_COMM_WORLD,&fn));
96
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.
152 PetscCall(FNSetType(fn,FNSQRT));
97
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.
152 PetscCall(FNSetFromOptions(fn));
98
99 /* Set up viewer */
100
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.
152 PetscCall(PetscViewerASCIIGetStdout(PETSC_COMM_WORLD,&viewer));
101
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.
152 PetscCall(FNView(fn,viewer));
102
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
152 if (verbose) PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_MATLAB));
103
104 /* Create matrix */
105
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
152 if (matcuda) {
106 #if defined(PETSC_HAVE_CUDA)
107
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
12 PetscCall(MatCreateSeqDenseCUDA(PETSC_COMM_SELF,n,n,NULL,&A));
108 #endif
109
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.
140 } else PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,n,n,NULL,&A));
110
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.
152 PetscCall(PetscObjectSetName((PetscObject)A,"A"));
111
112 /* Compute square root of a symmetric matrix A */
113
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.
152 PetscCall(MatDenseGetArray(A,&As));
114
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
15352 for (i=0;i<n;i++) As[i+i*n]=2.5;
115
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
456 for (j=1;j<3;j++) {
116
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
30248 for (i=0;i<n-j;i++) { As[i+(i+j)*n]=1.0; As[(i+j)+i*n]=1.0; }
117 }
118
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.
152 PetscCall(MatDenseRestoreArray(A,&As));
119
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.
152 PetscCall(MatSetOption(A,MAT_HERMITIAN,PETSC_TRUE));
120
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.
152 PetscCall(TestMatSqrt(fn,A,viewer,verbose,inplace));
121
122 /* Repeat with upper triangular A */
123
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.
152 PetscCall(MatDenseGetArray(A,&As));
124
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
456 for (j=1;j<3;j++) {
125
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
30248 for (i=0;i<n-j;i++) As[(i+j)+i*n]=0.0;
126 }
127
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.
152 PetscCall(MatDenseRestoreArray(A,&As));
128
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.
152 PetscCall(MatSetOption(A,MAT_HERMITIAN,PETSC_FALSE));
129
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.
152 PetscCall(TestMatSqrt(fn,A,viewer,verbose,inplace));
130
131 /* Repeat with non-symmetic A */
132
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.
152 PetscCall(PetscRandomCreate(PETSC_COMM_WORLD,&myrand));
133
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.
152 PetscCall(PetscRandomSetFromOptions(myrand));
134
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.
152 PetscCall(PetscRandomSetInterval(myrand,0.0,1.0));
135
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.
152 PetscCall(MatDenseGetArray(A,&As));
136
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
456 for (j=1;j<3;j++) {
137
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
30248 for (i=0;i<n-j;i++) {
138
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.
29944 PetscCall(PetscRandomGetValueReal(myrand,&v));
139 29944 As[(i+j)+i*n]=v;
140 }
141 }
142
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.
152 PetscCall(MatDenseRestoreArray(A,&As));
143
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.
152 PetscCall(PetscRandomDestroy(&myrand));
144
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.
152 PetscCall(MatSetOption(A,MAT_HERMITIAN,PETSC_FALSE));
145
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.
152 PetscCall(TestMatSqrt(fn,A,viewer,verbose,inplace));
146
147
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.
152 PetscCall(MatDestroy(&A));
148
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.
152 PetscCall(FNDestroy(&fn));
149
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.
152 PetscCall(SlepcFinalize());
150 return 0;
151 }
152
153 /*TEST
154
155 testset:
156 args: -fn_scale .05,2 -n 100
157 filter: grep -v "computing matrix functions"
158 output_file: output/test7_1.out
159 requires: !__float128
160 timeoutfactor: 2
161 test:
162 suffix: 1
163 args: -fn_method {{0 1 2}}
164 test:
165 suffix: 1_sadeghi
166 args: -fn_method 3
167 requires: !single
168 test:
169 suffix: 1_cuda
170 args: -fn_method 2 -matcuda
171 requires: cuda !single
172 test:
173 suffix: 1_magma
174 args: -fn_method {{1 3}} -matcuda
175 requires: cuda magma !single
176 test:
177 suffix: 2
178 args: -inplace -fn_method {{0 1 2}}
179 test:
180 suffix: 2_sadeghi
181 args: -inplace -fn_method 3
182 requires: !single
183 test:
184 suffix: 2_cuda
185 args: -inplace -fn_method 2 -matcuda
186 requires: cuda !single
187 test:
188 suffix: 2_magma
189 args: -inplace -fn_method {{1 3}} -matcuda
190 requires: cuda magma !single
191
192 testset:
193 nsize: 3
194 args: -fn_scale .05,2 -n 100 -fn_parallel synchronized
195 filter: grep -v "computing matrix functions" | grep -v "SYNCHRONIZED" | sed -e "s/3 MPI processes/1 MPI process/g"
196 requires: !__float128
197 output_file: output/test7_1.out
198 test:
199 suffix: 3
200 test:
201 suffix: 3_inplace
202 args: -inplace
203
204 TEST*/
205