|
285 | 285 | end
|
286 | 286 | end
|
287 | 287 |
|
| 288 | +@testset "broadcast[!] over combinations of scalars, structured matrices, and sparse vectors/matrices" begin |
| 289 | + N, p = 10, 0.4 |
| 290 | + s = rand() |
| 291 | + V = sprand(N, p) |
| 292 | + A = sprand(N, N, p) |
| 293 | + Z = copy(A) |
| 294 | + sparsearrays = (V, A) |
| 295 | + fV, fA = map(Array, sparsearrays) |
| 296 | + D = Diagonal(rand(N)) |
| 297 | + B = Bidiagonal(rand(N), rand(N - 1), true) |
| 298 | + T = Tridiagonal(rand(N - 1), rand(N), rand(N - 1)) |
| 299 | + S = SymTridiagonal(rand(N), rand(N - 1)) |
| 300 | + structuredarrays = (D, B, T, S) |
| 301 | + fstructuredarrays = map(Array, structuredarrays) |
| 302 | + for (X, fX) in zip(structuredarrays, fstructuredarrays) |
| 303 | + @test (Q = broadcast(sin, X); Q isa SparseMatrixCSC && Q == sparse(broadcast(sin, fX))) |
| 304 | + @test broadcast!(sin, Z, X) == sparse(broadcast(sin, fX)) |
| 305 | + @test (Q = broadcast(cos, X); Q isa SparseMatrixCSC && Q == sparse(broadcast(cos, fX))) |
| 306 | + @test broadcast!(cos, Z, X) == sparse(broadcast(cos, fX)) |
| 307 | + @test (Q = broadcast(*, s, X); Q isa SparseMatrixCSC && Q == sparse(broadcast(*, s, fX))) |
| 308 | + @test broadcast!(*, Z, s, X) == sparse(broadcast(*, s, fX)) |
| 309 | + @test (Q = broadcast(+, V, A, X); Q isa SparseMatrixCSC && Q == sparse(broadcast(+, fV, fA, fX))) |
| 310 | + @test broadcast!(+, Z, V, A, X) == sparse(broadcast(+, fV, fA, fX)) |
| 311 | + @test (Q = broadcast(*, s, V, A, X); Q isa SparseMatrixCSC && Q == sparse(broadcast(*, s, fV, fA, fX))) |
| 312 | + @test broadcast!(*, Z, s, V, A, X) == sparse(broadcast(*, s, fV, fA, fX)) |
| 313 | + for (Y, fY) in zip(structuredarrays, fstructuredarrays) |
| 314 | + @test (Q = broadcast(+, X, Y); Q isa SparseMatrixCSC && Q == sparse(broadcast(+, fX, fY))) |
| 315 | + @test broadcast!(+, Z, X, Y) == sparse(broadcast(+, fX, fY)) |
| 316 | + @test (Q = broadcast(*, X, Y); Q isa SparseMatrixCSC && Q == sparse(broadcast(*, fX, fY))) |
| 317 | + @test broadcast!(*, Z, X, Y) == sparse(broadcast(*, fX, fY)) |
| 318 | + end |
| 319 | + end |
| 320 | +end |
| 321 | + |
| 322 | +@testset "map[!] over combinations of sparse and structured matrices" begin |
| 323 | + N, p = 10, 0.4 |
| 324 | + A = sprand(N, N, p) |
| 325 | + Z, fA = copy(A), Array(A) |
| 326 | + D = Diagonal(rand(N)) |
| 327 | + B = Bidiagonal(rand(N), rand(N - 1), true) |
| 328 | + T = Tridiagonal(rand(N - 1), rand(N), rand(N - 1)) |
| 329 | + S = SymTridiagonal(rand(N), rand(N - 1)) |
| 330 | + structuredarrays = (D, B, T, S) |
| 331 | + fstructuredarrays = map(Array, structuredarrays) |
| 332 | + for (X, fX) in zip(structuredarrays, fstructuredarrays) |
| 333 | + @test (Q = map(sin, X); Q isa SparseMatrixCSC && Q == sparse(map(sin, fX))) |
| 334 | + @test map!(sin, Z, X) == sparse(map(sin, fX)) |
| 335 | + @test (Q = map(cos, X); Q isa SparseMatrixCSC && Q == sparse(map(cos, fX))) |
| 336 | + @test map!(cos, Z, X) == sparse(map(cos, fX)) |
| 337 | + @test (Q = map(+, A, X); Q isa SparseMatrixCSC && Q == sparse(map(+, fA, fX))) |
| 338 | + @test map!(+, Z, A, X) == sparse(map(+, fA, fX)) |
| 339 | + for (Y, fY) in zip(structuredarrays, fstructuredarrays) |
| 340 | + @test (Q = map(+, X, Y); Q isa SparseMatrixCSC && Q == sparse(map(+, fX, fY))) |
| 341 | + @test map!(+, Z, X, Y) == sparse(map(+, fX, fY)) |
| 342 | + @test (Q = map(*, X, Y); Q isa SparseMatrixCSC && Q == sparse(map(*, fX, fY))) |
| 343 | + @test map!(*, Z, X, Y) == sparse(map(*, fX, fY)) |
| 344 | + @test (Q = map(+, X, A, Y); Q isa SparseMatrixCSC && Q == sparse(map(+, fX, fA, fY))) |
| 345 | + @test map!(+, Z, X, A, Y) == sparse(map(+, fX, fA, fY)) |
| 346 | + end |
| 347 | + end |
| 348 | +end |
| 349 | + |
288 | 350 | # Older tests of sparse broadcast, now largely covered by the tests above
|
289 | 351 | @testset "assorted tests of sparse broadcast over two input arguments" begin
|
290 | 352 | N, p = 10, 0.3
|
|
0 commit comments