@@ -370,6 +370,41 @@ Random.seed!(100)
370370 @test all (o4cp .== z4)
371371 @test all (BLAS. gemv (' N' , U4, o4) .== v41)
372372 @test all (BLAS. gemv (' N' , U4, o4) .== v41)
373+ @testset " non-standard strides" begin
374+ if elty <: Complex
375+ A = elty[1 + 2im 3 + 4im 5 + 6im 7 + 8im ; 2 + 3im 4 + 5im 6 + 7im 8 + 9im ; 3 + 4im 5 + 6im 7 + 8im 9 + 10im ]
376+ v = elty[1 + 2im , 2 + 3im , 3 + 4im , 4 + 5im ]
377+ dest = view (ones (elty, 5 ), 4 : - 2 : 2 )
378+ @test BLAS. gemv! (' N' , elty (2 ), view (A, 2 : 3 , 2 : 2 : 4 ), view (v, 1 : 3 : 4 ), elty (3 ), dest) == elty[- 35 + 178im , - 39 + 202im ]
379+ @test BLAS. gemv (' N' , elty (- 1 ), view (A, 2 : 3 , 2 : 3 ), view (v, 2 : - 1 : 1 )) == elty[15 - 41im , 17 - 49im ]
380+ @test BLAS. gemv (' N' , view (A, 1 : 0 , 1 : 2 ), view (v, 1 : 2 )) == elty[]
381+ dest = view (ones (elty, 5 ), 4 : - 2 : 2 )
382+ @test BLAS. gemv! (' T' , elty (2 ), view (A, 2 : 3 , 2 : 2 : 4 ), view (v, 1 : 3 : 4 ), elty (3 ), dest) == elty[- 29 + 124im , - 45 + 220im ]
383+ @test BLAS. gemv (' T' , elty (- 1 ), view (A, 2 : 3 , 2 : 3 ), view (v, 2 : - 1 : 1 )) == elty[14 - 38im , 18 - 54im ]
384+ @test BLAS. gemv (' T' , view (A, 2 : 3 , 2 : 1 ), view (v, 1 : 2 )) == elty[]
385+ dest = view (ones (elty, 5 ), 4 : - 2 : 2 )
386+ @test BLAS. gemv! (' C' , elty (2 ), view (A, 2 : 3 , 2 : 2 : 4 ), view (v, 1 : 3 : 4 ), elty (3 ), dest) == elty[131 + 8im , 227 + 24im ]
387+ @test BLAS. gemv (' C' , elty (- 1 ), view (A, 2 : 3 , 2 : 3 ), view (v, 2 : - 1 : 1 )) == elty[- 40 - 6im , - 56 - 10im ]
388+ @test BLAS. gemv (' C' , view (A, 2 : 3 , 2 : 1 ), view (v, 1 : 2 )) == elty[]
389+ else
390+ A = elty[1 2 3 4 ; 5 6 7 8 ; 9 10 11 12 ]
391+ v = elty[1 , 2 , 3 , 4 ]
392+ dest = view (ones (elty, 5 ), 4 : - 2 : 2 )
393+ @test BLAS. gemv! (' N' , elty (2 ), view (A, 2 : 3 , 2 : 2 : 4 ), view (v, 1 : 3 : 4 ), elty (3 ), dest) == elty[79 , 119 ]
394+ @test BLAS. gemv (' N' , elty (- 1 ), view (A, 2 : 3 , 2 : 3 ), view (v, 2 : - 1 : 1 )) == elty[- 19 , - 31 ]
395+ @test BLAS. gemv (' N' , view (A, 1 : 0 , 1 : 2 ), view (v, 1 : 2 )) == elty[]
396+ for trans = (' T' , ' C' )
397+ dest = view (ones (elty, 5 ), 4 : - 2 : 2 )
398+ @test BLAS. gemv! (trans, elty (2 ), view (A, 2 : 3 , 2 : 2 : 4 ), view (v, 1 : 3 : 4 ), elty (3 ), dest) == elty[95 , 115 ]
399+ @test BLAS. gemv (trans, elty (- 1 ), view (A, 2 : 3 , 2 : 3 ), view (v, 2 : - 1 : 1 )) == elty[- 22 , - 25 ]
400+ @test BLAS. gemv (trans, view (A, 2 : 3 , 2 : 1 ), view (v, 1 : 2 )) == elty[]
401+ end
402+ end
403+ for trans = (' N' , ' T' , ' C' )
404+ @test_throws ErrorException BLAS. gemv (trans, view (A, 1 : 2 : 3 , 1 : 2 ), view (v, 1 : 2 ))
405+ @test_throws ErrorException BLAS. gemv (trans, view (A, 1 : 2 , 2 : - 1 : 1 ), view (v, 1 : 2 ))
406+ end
407+ end
373408 end
374409 @testset " gemm" begin
375410 @test all (BLAS. gemm (' N' , ' N' , I4, I4) .== I4)
@@ -459,6 +494,7 @@ Base.setindex!(A::WrappedArray{T, N}, v, I::Vararg{Int, N}) where {T, N} = setin
459494Base. unsafe_convert (:: Type{Ptr{T}} , A:: WrappedArray{T} ) where T = Base. unsafe_convert (Ptr{T}, A. A)
460495
461496Base. strides (A:: WrappedArray ) = strides (A. A)
497+ Base. elsize (:: Type{WrappedArray{T,N}} ) where {T,N} = Base. elsize (Array{T,N})
462498
463499@testset " strided interface adjtrans" begin
464500 x = WrappedArray ([1 , 2 , 3 , 4 ])
0 commit comments