@@ -8,6 +8,7 @@ module test_specialmatrices
88 use stdlib_linalg_state, only: linalg_state_type
99 use stdlib_math, only: all_close
1010 use stdlib_specialmatrices
11+ use stdlib_strings, only: to_string
1112 implicit none
1213
1314contains
@@ -59,15 +60,17 @@ contains
5960 ! Test y = A @ x
6061 y1 = matmul(Amat, x)
6162 call spmv(A, x, y2)
62- call check(error, all_close(y1, y2), .true.)
63+ call check(error, all_close(y1, y2), .true.,&
64+ "spmv(fail): y = A*x")
6365 if (allocated(error)) return
6466
6567 ! Test y = A.T @ x
6668 y1 = 0.0_wp
6769 y2 = 0.0_wp
6870 y1 = matmul(transpose(Amat), x)
6971 call spmv(A, x, y2, op="T")
70- call check(error, all_close(y1, y2), .true.)
72+ call check(error, all_close(y1, y2), .true.,&
73+ "spmv(fail): y = A.T*x")
7174 if (allocated(error)) return
7275
7376 #:if t1.startswith('complex')
@@ -76,7 +79,8 @@ contains
7679 y2 = 0.0_wp
7780 y1 = matmul(hermitian(Amat), x)
7881 call spmv(A, x, y2, op="H")
79- call check(error, all_close(y1, y2), .true.)
82+ call check(error, all_close(y1, y2), .true.,&
83+ "spmv(fail): y = A.H*x")
8084 if (allocated(error)) return
8185 #:endif
8286
@@ -90,40 +94,44 @@ contains
9094 call random_number(y2)
9195 y1 = alpha * matmul(Amat, x) + beta * y2
9296 call spmv(A, x, y2, alpha=alpha, beta=beta)
93- call check(error, all_close(y1, y2), .true.)
97+ call check(error, all_close(y1, y2), .true.,&
98+ "spmv(fail): y = alpha*A*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
9499 if (allocated(error)) return
95100 end do
96101 end do
97102
98- ! Test y = A @ x for random values of alpha and beta
103+ ! Test y = alpha * A @ x + beta * y for random values of alpha and beta
99104 y1 = 0.0_wp
100105 call random_number(alpha)
101106 call random_number(beta)
102107 call random_number(y2)
103108 y1 = alpha * matmul(Amat, x) + beta * y2
104109 call spmv(A, x, y2, alpha=alpha, beta=beta)
105- call check(error, all_close(y1, y2), .true.)
110+ call check(error, all_close(y1, y2), .true.,&
111+ "spmv(fail): y = alpha*A*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
106112 if (allocated(error)) return
107113
108- ! Test y = A.T @ x for random values of alpha and beta
114+ ! Test y = alpha * A.T @ x beta * y for random values of alpha and beta
109115 y1 = 0.0_wp
110116 call random_number(alpha)
111117 call random_number(beta)
112118 call random_number(y2)
113119 y1 = alpha * matmul(transpose(Amat), x) + beta * y2
114120 call spmv(A, x, y2, alpha=alpha, beta=beta, op="T")
115- call check(error, all_close(y1, y2), .true.)
121+ call check(error, all_close(y1, y2), .true.,&
122+ "spmv(fail): y = alpha*A.T*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
116123 if (allocated(error)) return
117124
118125 #:if t1.startswith('complex')
119- ! Test y = A.H @ x for random values of alpha and beta
126+ ! Test y = alpha * A.H @ x + beta * y for random values of alpha and beta
120127 y1 = 0.0_wp
121128 call random_number(alpha)
122129 call random_number(beta)
123130 call random_number(y2)
124131 y1 = alpha * matmul(transpose(conjg((Amat))), x) + beta * y2
125132 call spmv(A, x, y2, alpha=alpha, beta=beta, op="H")
126- call check(error, all_close(y1, y2), .true.)
133+ call check(error, all_close(y1, y2), .true.,&
134+ "spmv(fail): y = alpha*A.H*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
127135 if (allocated(error)) return
128136 #:endif
129137
@@ -163,15 +171,17 @@ contains
163171 ! Test y = A @ x
164172 y1 = matmul(Amat, x)
165173 call spmv(A, x, y2)
166- call check(error, all_close(y1, y2), .true.)
174+ call check(error, all_close(y1, y2), .true.,&
175+ "spmv(fail): y = A*x")
167176 if (allocated(error)) return
168177
169178 ! Test y = A.T @ x
170179 y1 = 0.0_wp
171180 y2 = 0.0_wp
172181 y1 = matmul(transpose(Amat), x)
173182 call spmv(A, x, y2, op="T")
174- call check(error, all_close(y1, y2), .true.)
183+ call check(error, all_close(y1, y2), .true.,&
184+ "spmv(fail): y = A.T*x")
175185 if (allocated(error)) return
176186
177187 #:if t1.startswith('complex')
@@ -180,7 +190,8 @@ contains
180190 y2 = 0.0_wp
181191 y1 = matmul(hermitian(Amat), x)
182192 call spmv(A, x, y2, op="H")
183- call check(error, all_close(y1, y2), .true.)
193+ call check(error, all_close(y1, y2), .true.,&
194+ "spmv(fail): y = A.H*x")
184195 if (allocated(error)) return
185196 #:endif
186197
@@ -194,40 +205,44 @@ contains
194205 call random_number(y2)
195206 y1 = alpha * matmul(Amat, x) + beta * y2
196207 call spmv(A, x, y2, alpha=alpha, beta=beta)
197- call check(error, all_close(y1, y2), .true.)
208+ call check(error, all_close(y1, y2), .true.,&
209+ "spmv(fail): y = alpha*A*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
198210 if (allocated(error)) return
199211 end do
200212 end do
201213
202- ! Test y = A @ x for random values of alpha and beta
214+ ! Test y = alpha * A @ x + beta * y for random values of alpha and beta
203215 y1 = 0.0_wp
204216 call random_number(alpha)
205217 call random_number(beta)
206218 call random_number(y2)
207219 y1 = alpha * matmul(Amat, x) + beta * y2
208220 call spmv(A, x, y2, alpha=alpha, beta=beta)
209- call check(error, all_close(y1, y2), .true.)
221+ call check(error, all_close(y1, y2), .true.,&
222+ "spmv(fail): y = alpha*A*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
210223 if (allocated(error)) return
211224
212- ! Test y = A.T @ x for random values of alpha and beta
225+ ! Test y = alpha * A.T @ x + beta * y for random values of alpha and beta
213226 y1 = 0.0_wp
214227 call random_number(alpha)
215228 call random_number(beta)
216229 call random_number(y2)
217230 y1 = alpha * matmul(transpose(Amat), x) + beta * y2
218231 call spmv(A, x, y2, alpha=alpha, beta=beta, op="T")
219- call check(error, all_close(y1, y2), .true.)
232+ call check(error, all_close(y1, y2), .true.,&
233+ "spmv(fail): y = alpha*A.T*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
220234 if (allocated(error)) return
221235
222236 #:if t1.startswith('complex')
223- ! Test y = A.H @ x for random values of alpha and beta
237+ ! Test y = alpha * A.H @ x + beta * y for random values of alpha and beta
224238 y1 = 0.0_wp
225239 call random_number(alpha)
226240 call random_number(beta)
227241 call random_number(y2)
228242 y1 = alpha * matmul(transpose(conjg((Amat))), x) + beta * y2
229243 call spmv(A, x, y2, alpha=alpha, beta=beta, op="H")
230- call check(error, all_close(y1, y2), .true.)
244+ call check(error, all_close(y1, y2), .true.,&
245+ "spmv(fail): y = alpha*A.H*x + beta*y, alpha: "//to_string(alpha)//", beta: "//to_string(beta))
231246 if (allocated(error)) return
232247 #:endif
233248
@@ -252,12 +267,12 @@ contains
252267 du = dl
253268 dv = [(2.0_wp, i = 1, n)]
254269 A = tridiagonal(dl, dv, du, state)
255- call check(error, state%ok(), .false.)
270+ call check(error, state%ok(), .false., "Tridiagonal constructor from arrays failed" )
256271 if (allocated(error)) return
257272
258- !> Test contructor from constants .
273+ !> Test constructor from scalars .
259274 A = tridiagonal(dl(1), dv(1), du(1), -n, state)
260- call check(error, state%ok(), .false.)
275+ call check(error, state%ok(), .false., "Tridiagonal constructor from scalars failed" )
261276 if (allocated(error)) return
262277 end block
263278 #:endfor
@@ -279,12 +294,14 @@ contains
279294 du = [(1.0_wp, i = 1, n-2)]
280295 dv = [(2.0_wp, i = 1, n)]
281296 A = sym_tridiagonal(du, dv, state)
282- call check(error, state%ok(), .false.)
297+ call check(error, state%ok(), .false.,&
298+ "Symmetric tridiagonal constructor from arrays failed")
283299 if (allocated(error)) return
284300
285- !> Test contructor from constants .
301+ !> Test constructor from scalars .
286302 A = sym_tridiagonal(du(1), dv(1), -n, state)
287- call check(error, state%ok(), .false.)
303+ call check(error, state%ok(), .false.,&
304+ "Symmetric tridiagonal constructor from scalars failed")
288305 if (allocated(error)) return
289306 end block
290307 #:endfor
0 commit comments