|
1 | 1 | using DimensionalData, Test
|
2 |
| - |
| 2 | +using JLArrays |
3 | 3 | using DimensionalData: NoLookup
|
4 | 4 |
|
5 | 5 | # Tests taken from NamedDims. Thanks @oxinabox
|
6 | 6 |
|
7 | 7 | da = ones(X(3))
|
| 8 | +dajl = rebuild(da, JLArray(parent(da))); |
8 | 9 | @test Base.BroadcastStyle(typeof(da)) isa DimensionalData.DimensionalStyle
|
9 | 10 |
|
10 | 11 | @testset "standard case" begin
|
|
19 | 20 | @test da2 .* da2[:, 1:1] == [1, 4, 9, 16] * (1:2:8)'
|
20 | 21 | end
|
21 | 22 |
|
| 23 | +@testset "JLArray broadcast over length one dimension" begin |
| 24 | + da2 = DimArray(JLArray((1:4) * (1:2:8)'), (X, Y)) |
| 25 | + @test Array(da2 .* da2[:, 1:1]) == [1, 4, 9, 16] * (1:2:8)' |
| 26 | +end |
| 27 | + |
22 | 28 | @testset "in place" begin
|
23 | 29 | @test parent(da .= 1 .* da .+ 7) == 8 * ones(3)
|
24 | 30 | @test dims(da .= 1 .* da .+ 7) == dims(da)
|
25 | 31 | end
|
26 | 32 |
|
| 33 | +@testset "JLArray in place" begin |
| 34 | + @test Array(parent(dajl .= 1 .* dajl .+ 7)) == 8 * ones(3) |
| 35 | + @test dims(dajl .= 1 .* dajl .+ 7) == dims(da) |
| 36 | +end |
| 37 | + |
27 | 38 | @testset "Dimension disagreement" begin
|
28 | 39 | @test_throws DimensionMismatch begin
|
29 | 40 | DimArray(zeros(3, 3, 3), (X, Y, Z)) .+
|
30 | 41 | DimArray(ones(3, 3, 3), (Y, Z, X))
|
31 | 42 | end
|
32 | 43 | end
|
33 | 44 |
|
| 45 | +@testset "JLArray Dimension disagreement" begin |
| 46 | + @test_throws DimensionMismatch begin |
| 47 | + DimArray(JLArray(zeros(3, 3, 3)), (X, Y, Z)) .+ |
| 48 | + DimArray(JLArray(ones(3, 3, 3)), (Y, Z, X)) |
| 49 | + end |
| 50 | +end |
| 51 | + |
34 | 52 | @testset "dims and regular" begin
|
35 | 53 | da = DimArray(ones(3, 3, 3), (X, Y, Z))
|
36 | 54 | left_sum = da .+ ones(3, 3, 3)
|
|
41 | 59 | @test dims(right_sum) == dims(da)
|
42 | 60 | end
|
43 | 61 |
|
| 62 | +@testset "JLArray dims and regular" begin |
| 63 | + da = DimArray(JLArray(ones(3, 3, 3)), (X, Y, Z)) |
| 64 | + left_sum = da .+ ones(3, 3, 3) |
| 65 | + @test Array(left_sum) == fill(2, 3, 3, 3) |
| 66 | + @test dims(left_sum) == dims(da) |
| 67 | + right_sum = ones(3, 3, 3) .+ da |
| 68 | + @test Array(right_sum) == fill(2, 3, 3, 3) |
| 69 | + @test dims(right_sum) == dims(da) |
| 70 | +end |
| 71 | + |
44 | 72 | @testset "changing type" begin
|
45 | 73 | @test (da .> 0) isa DimArray
|
46 | 74 | @test (da .* da .> 0) isa DimArray
|
|
51 | 79 | @test (rand(3) .> 1 .> 0 .* da) isa DimArray
|
52 | 80 | end
|
53 | 81 |
|
| 82 | +@testset "JLArray changing type" begin |
| 83 | + @test (dajl .> 0) isa DimArray |
| 84 | + @test (dajl .* dajl .> 0) isa DimArray |
| 85 | + @test (dajl .> 0 .> rand(3)) isa DimArray |
| 86 | + @test (dajl .* rand(3) .> 0.0) isa DimArray |
| 87 | + @test (0 .> dajl .> 0 .> rand(3)) isa DimArray |
| 88 | + @test (rand(3) .> dajl .> 0 .* rand(3)) isa DimArray |
| 89 | + @test (rand(3) .> 1 .> 0 .* dajl) isa DimArray |
| 90 | +end |
| 91 | + |
54 | 92 | @testset "trailng dimensions" begin
|
55 | 93 | @test zeros(X(10), Y(5)) .* zeros(X(10), Y(1)) ==
|
56 | 94 | zeros(X(10), Y(5)) .* zeros(X(1), Y(1)) ==
|
|
79 | 117 | @test dims(s .+ v .+ m) == dims(m .+ s .+ v)
|
80 | 118 | end
|
81 | 119 |
|
| 120 | +@testset "JLArray broadcasting" begin |
| 121 | + v = DimArray(JLArray(zeros(3,)), X) |
| 122 | + m = DimArray(JLArray(ones(3, 3)), (X, Y)) |
| 123 | + s = 0 |
| 124 | + @test Array(v .+ m) == ones(3, 3) == Array(m .+ v) |
| 125 | + @test Array(s .+ m) == ones(3, 3) == Array(m .+ s) |
| 126 | + @test Array(s .+ v .+ m) == ones(3, 3) == Array(m .+ s .+ v) |
| 127 | + @test dims(v .+ m) == dims(m .+ v) |
| 128 | + @test dims(s .+ m) == dims(m .+ s) |
| 129 | + @test dims(s .+ v .+ m) == dims(m .+ s .+ v) |
| 130 | +end |
| 131 | + |
82 | 132 | @testset "adjoint broadcasting" begin
|
83 | 133 | a = DimArray(reshape(1:12, (4, 3)), (X, Y))
|
84 | 134 | b = DimArray(1:3, Y)
|
|
88 | 138 | @test dims(a .* b') == dims(a)
|
89 | 139 | end
|
90 | 140 |
|
| 141 | +@testset "JLArray adjoint broadcasting" begin |
| 142 | + a = DimArray(JLArray(reshape(1:12, (4, 3))), (X, Y)) |
| 143 | + b = DimArray(JLArray(1:3), Y) |
| 144 | + @test_throws DimensionMismatch a .* b |
| 145 | + @test_throws DimensionMismatch parent(a) .* parent(b) |
| 146 | + @test Array(parent(a) .* parent(b)') == Array(parent(a .* b')) |
| 147 | + @test dims(a .* b') == dims(a) |
| 148 | +end |
| 149 | + |
| 150 | + |
| 151 | + |
91 | 152 | @testset "Mixed array types" begin
|
92 | 153 | casts = (
|
93 | 154 | A -> DimArray(A, (X, Y)), # Named Matrix
|
@@ -121,13 +182,26 @@ end
|
121 | 182 | @test_throws DimensionMismatch ac .= ab .+ ba
|
122 | 183 |
|
123 | 184 | # check that dest is written into:
|
124 |
| - @test dims(z .= ab .+ ba') == dims(ab .+ ba') |
| 185 | + z .= ab .+ ba' |
125 | 186 | @test z == (ab.data .+ ba.data')
|
| 187 | +end |
126 | 188 |
|
127 |
| - @test dims(z .= ab .+ a_) == |
128 |
| - (X(NoLookup(Base.OneTo(2))), Y(NoLookup(Base.OneTo(2)))) |
129 |
| - @test dims(a_ .= ba' .+ ab) == |
130 |
| - (X(NoLookup(Base.OneTo(2))), Y(NoLookup(Base.OneTo(2)))) |
| 189 | +@testset "JLArray in-place assignment .=" begin |
| 190 | + ab = DimArray(JLArray(rand(2,2)), (X, Y)) |
| 191 | + ba = DimArray(JLArray(rand(2,2)), (Y, X)) |
| 192 | + ac = DimArray(JLArray(rand(2,2)), (X, Z)) |
| 193 | + a_ = DimArray(JLArray(rand(2,2)), (X(), DimensionalData.AnonDim())) |
| 194 | + z = JLArray(zeros(2,2)) |
| 195 | + |
| 196 | + @test_throws DimensionMismatch z .= ab .+ ba |
| 197 | + @test_throws DimensionMismatch z .= ab .+ ac |
| 198 | + @test_throws DimensionMismatch a_ .= ab .+ ac |
| 199 | + @test_throws DimensionMismatch ab .= a_ .+ ac |
| 200 | + @test_throws DimensionMismatch ac .= ab .+ ba |
| 201 | + |
| 202 | + # check that dest is written into: |
| 203 | + z .= ab .+ ba' |
| 204 | + @test z == (ab.data .+ ba.data') |
131 | 205 | end
|
132 | 206 |
|
133 | 207 | @testset "assign using named indexing and dotview" begin
|
|
137 | 211 | @test A == [1.0 1.0; 2.0 2.0; 7.0 7.0]
|
138 | 212 | end
|
139 | 213 |
|
| 214 | +@testset "JLArray assign using named indexing and dotview" begin |
| 215 | + A = DimArray(JLArray(zeros(3,2)), (X, Y)) |
| 216 | + A[X=1:2] .= JLArray([1, 2]) |
| 217 | + A[X=3] .= 7 |
| 218 | + @test Array(A) == [1.0 1.0; 2.0 2.0; 7.0 7.0] |
| 219 | +end |
| 220 | + |
140 | 221 | @testset "0-dimensional array broadcasting" begin
|
141 | 222 | x = DimArray(fill(3), ())
|
142 | 223 | y = DimArray(fill(4), ())
|
|
168 | 249 | @test A[DimSelectors(sub)] == C[DimSelectors(sub)]
|
169 | 250 | end
|
170 | 251 |
|
| 252 | +@testset "JLArray DimIndices broadcasting" begin |
| 253 | + ds = X(1.0:0.2:2.0), Y(10:2:20) |
| 254 | + _A = (rand(ds)) |
| 255 | + _B = (zeros(ds)) |
| 256 | + _C = (zeros(ds)) |
| 257 | + |
| 258 | + A = rebuild(_A, JLArray(parent(_A))) |
| 259 | + B = rebuild(_B, JLArray(parent(_B))) |
| 260 | + C = rebuild(_C, JLArray(parent(_C))) |
| 261 | + |
| 262 | + B[DimIndices(B)] .+= A |
| 263 | + C[DimSelectors(C)] .+= A |
| 264 | + @test Array(A) == Array(B) == Array(C) |
| 265 | + sub = A[1:4, 1:3] |
| 266 | + B .= 0 |
| 267 | + C .= 0 |
| 268 | + B[DimIndices(sub)] .+= sub |
| 269 | + C[DimSelectors(sub)] .+= sub |
| 270 | + @test Array(A[DimIndices(sub)]) == Array(B[DimIndices(sub)]) == Array(C[DimIndices(sub)]) |
| 271 | + sub = A[2:4, 2:5] |
| 272 | + C .= 0 |
| 273 | + C[DimSelectors(sub)] .+= sub |
| 274 | + @test Array(A[DimSelectors(sub)]) == Array(C[DimSelectors(sub)]) |
| 275 | +end |
| 276 | + |
171 | 277 | # @testset "Competing Wrappers" begin
|
172 | 278 | # da = DimArray(ones(4), X)
|
173 | 279 | # ta = TrackedArray(5 * ones(4))
|
|
0 commit comments