|
1 | 1 | using ArrayLayouts, LinearAlgebra, FillArrays, Test
|
2 | 2 | import ArrayLayouts: MemoryLayout, DenseRowMajor, DenseColumnMajor, StridedLayout,
|
3 |
| - ConjLayout, RowMajor, ColumnMajor, UnknownLayout, |
| 3 | + ConjLayout, RowMajor, ColumnMajor, UnitStride, |
4 | 4 | SymmetricLayout, HermitianLayout, UpperTriangularLayout,
|
5 | 5 | UnitUpperTriangularLayout, LowerTriangularLayout,
|
6 |
| - UnitLowerTriangularLayout, ScalarLayout, |
| 6 | + UnitLowerTriangularLayout, ScalarLayout, UnknownLayout, |
7 | 7 | hermitiandata, symmetricdata, FillLayout, ZerosLayout,
|
8 | 8 | DiagonalLayout, colsupport, rowsupport
|
9 | 9 |
|
@@ -178,4 +178,58 @@ struct FooNumber <: Number end
|
178 | 178 | @test colsupport(LowerTriangular(A),3) ≡ 3:5
|
179 | 179 | @test rowsupport(LowerTriangular(A),3) ≡ Base.OneTo(3)
|
180 | 180 | end
|
| 181 | + |
| 182 | + @testset "PermutedDimsArray" begin |
| 183 | + A = [1.0 2; 3 4] |
| 184 | + @test MemoryLayout(PermutedDimsArray(A, (1,2))) == DenseColumnMajor() |
| 185 | + @test MemoryLayout(PermutedDimsArray(A, (2,1))) == DenseRowMajor() |
| 186 | + @test MemoryLayout(transpose(PermutedDimsArray(A, (2,1)))) == DenseColumnMajor() |
| 187 | + @test MemoryLayout(adjoint(PermutedDimsArray(A, (2,1)))) == DenseColumnMajor() |
| 188 | + B = [1.0+im 2; 3 4] |
| 189 | + @test MemoryLayout(PermutedDimsArray(B, (2,1))) == DenseRowMajor() |
| 190 | + @test MemoryLayout(transpose(PermutedDimsArray(B, (2,1)))) == DenseColumnMajor() |
| 191 | + @test MemoryLayout(adjoint(PermutedDimsArray(B, (2,1)))) == ConjLayout{DenseColumnMajor}() |
| 192 | + |
| 193 | + C = view(ones(10,20,30), 2:9, 3:18, 4:27); |
| 194 | + @test MemoryLayout(C) == ColumnMajor() |
| 195 | + @test MemoryLayout(PermutedDimsArray(C, (1,2,3))) == ColumnMajor() |
| 196 | + @test MemoryLayout(PermutedDimsArray(C, (1,3,2))) == UnitStride{1}() |
| 197 | + |
| 198 | + @test MemoryLayout(PermutedDimsArray(C, (3,1,2))) == UnitStride{2}() |
| 199 | + @test MemoryLayout(PermutedDimsArray(C, (2,1,3))) == UnitStride{2}() |
| 200 | + |
| 201 | + @test MemoryLayout(PermutedDimsArray(C, (3,2,1))) == RowMajor() |
| 202 | + @test MemoryLayout(PermutedDimsArray(C, (2,3,1))) == UnitStride{3}() |
| 203 | + |
| 204 | + revC = PermutedDimsArray(C, (3,2,1)); |
| 205 | + @test MemoryLayout(PermutedDimsArray(revC, (3,2,1))) == ColumnMajor() |
| 206 | + @test MemoryLayout(PermutedDimsArray(revC, (3,1,2))) == UnitStride{1}() |
| 207 | + |
| 208 | + D = ones(10,20,30,40); |
| 209 | + @test MemoryLayout(D) == DenseColumnMajor() |
| 210 | + @test MemoryLayout(PermutedDimsArray(D, (1,2,3,4))) == DenseColumnMajor() |
| 211 | + @test MemoryLayout(PermutedDimsArray(D, (1,4,3,2))) == UnitStride{1}() |
| 212 | + |
| 213 | + @test MemoryLayout(PermutedDimsArray(D, (4,1,3,2))) == UnitStride{2}() |
| 214 | + @test MemoryLayout(PermutedDimsArray(D, (2,1,4,3))) == UnitStride{2}() |
| 215 | + |
| 216 | + @test MemoryLayout(PermutedDimsArray(D, (4,3,2,1))) == DenseRowMajor() |
| 217 | + @test MemoryLayout(PermutedDimsArray(D, (4,2,1,3))) == UnitStride{3}() |
| 218 | + |
| 219 | + twoD = PermutedDimsArray(D, (3,1,2,4)); |
| 220 | + MemoryLayout(PermutedDimsArray(twoD, (2,1,4,3))) == UnitStride{1}() |
| 221 | + |
| 222 | + revD = PermutedDimsArray(D, (4,3,2,1)); |
| 223 | + MemoryLayout(PermutedDimsArray(revD, (4,3,2,1))) == DenseColumnMajor() |
| 224 | + MemoryLayout(PermutedDimsArray(revD, (4,2,3,1))) == UnitStride{1}() |
| 225 | + |
| 226 | + |
| 227 | + issorted((1,2,3,4)) |
| 228 | + # Fails on Julia 1.4, in tests. Could use BenchmarkTools.@ballocated instead. |
| 229 | + @test_skip 0 == @allocated issorted((1,2,3,4)) |
| 230 | + reverse((1,2,3,4)) |
| 231 | + @test_skip 0 == @allocated reverse((1,2,3,4)) |
| 232 | + MemoryLayout(revD) |
| 233 | + @test 0 == @allocated MemoryLayout(revD) |
| 234 | + end |
181 | 235 | end
|
0 commit comments