1
- using LazyArrays, Test
2
-
3
- @testset " BroadcastArray" begin
4
- a = randn (6 )
5
- b = BroadcastArray (exp, a)
6
- @test BroadcastArray (b) == BroadcastVector (b) == b
7
-
8
- @test b == Vector (b) == exp .(a)
9
- @test b[2 : 5 ] isa BroadcastVector
10
- @test b[2 : 5 ] == exp .(a[2 : 5 ])
11
-
12
- @test exp .(b) isa BroadcastVector
13
- @test b .+ SVector (1 ,2 ,3 ,4 ,5 ,6 ) isa BroadcastVector
14
- @test SVector (1 ,2 ,3 ,4 ,5 ,6 ) .+ b isa BroadcastVector
15
-
16
- A = randn (6 ,6 )
17
- B = BroadcastArray (exp, A)
18
-
19
- @test Matrix (B) == exp .(A)
20
-
21
-
22
- C = BroadcastArray (+ , A, 2 )
23
- @test C == A .+ 2
24
- D = BroadcastArray (+ , A, C)
25
- @test D == A + C
26
-
27
- @test sum (B) ≈ sum (exp, A)
28
- @test sum (C) ≈ sum (A .+ 2 )
29
- @test prod (B) ≈ prod (exp, A)
30
- @test prod (C) ≈ prod (A .+ 2 )
31
-
32
- x = Vcat ([3 ,4 ], [1 ,1 ,1 ,1 ,1 ], 1 : 3 )
33
- @test x .+ (1 : 10 ) isa Vcat
34
- @test (1 : 10 ) .+ x isa Vcat
35
- @test x + (1 : 10 ) isa Vcat
36
- @test (1 : 10 ) + x isa Vcat
37
- @test x .+ (1 : 10 ) == (1 : 10 ) .+ x == (1 : 10 ) + x == x + (1 : 10 ) == Vector (x) + (1 : 10 )
38
-
39
- @test exp .(x) isa Vcat
40
- @test exp .(x) == exp .(Vector (x))
41
- @test x .+ 2 isa Vcat
42
- @test (x .+ 2 ). args[end ] ≡ x. args[end ] .+ 2 ≡ 3 : 5
43
- @test x .* 2 isa Vcat
44
- @test 2 .+ x isa Vcat
45
- @test 2 .* x isa Vcat
46
-
47
- A = Vcat ([[1 2 ; 3 4 ]], [[4 5 ; 6 7 ]])
48
- @test A .+ Ref (I) == Ref (I) .+ A == Vcat ([[2 2 ; 3 5 ]], [[5 5 ; 6 8 ]])
49
-
50
- @test_broken BroadcastArray (* ,1.1 ,[1 2 ])[1 ] == 1.1
51
-
52
- B = BroadcastArray (* , Diagonal (randn (5 )), randn (5 ,5 ))
53
- @test B == broadcast (* ,B. args... )
54
- @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
55
- @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
56
- @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
57
- B = BroadcastArray (* , Diagonal (randn (5 )), 2 )
58
- @test B == broadcast (* ,B. args... )
59
- @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
60
- @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
61
- @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
62
- B = BroadcastArray (* , Diagonal (randn (5 )), randn (5 ))
63
- @test B == broadcast (* ,B. args... )
64
- @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
65
- @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
66
- @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
67
-
68
- B = BroadcastArray (+ , Diagonal (randn (5 )), 2 )
69
- @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 5
70
- @test colsupport (B,3 ) == rowsupport (B,3 ) == 1 : 5
71
- @test colsupport (B,5 ) == rowsupport (B,5 ) == 1 : 5
72
- end
73
-
74
- @testset " vector*matrix broadcasting #27" begin
75
- H = [1. , 0. ]
76
- @test Mul (H, H' ) .+ 1 == H* H' .+ 1
77
- B = randn (2 ,2 )
78
- @test Mul (H, H' ) .+ B == H* H' .+ B
79
- end
80
-
81
- @testset " BroadcastArray +" begin
82
- a = BroadcastArray (+ , randn (400 ), randn (400 ))
83
- b = similar (a)
84
- copyto! (b, a)
85
- if VERSION ≥ v " 1.1"
86
- @test @allocated (copyto! (b, a)) == 0
1
+ using LazyArrays, ArrayLayouts, LinearAlgebra, FillArrays, StaticArrays, Test
2
+ import LazyArrays: BroadcastLayout, arguments, LazyArrayStyle
3
+ import Base: broadcasted
4
+
5
+ @testset " Broadcasting" begin
6
+ @testset " BroadcastArray" begin
7
+ a = randn (6 )
8
+ b = BroadcastArray (exp, a)
9
+ @test BroadcastArray (b) == BroadcastVector (b) == b
10
+
11
+ @test b == Vector (b) == exp .(a)
12
+ @test b[2 : 5 ] isa BroadcastVector
13
+ @test b[2 : 5 ] == exp .(a[2 : 5 ])
14
+
15
+ @test exp .(b) isa BroadcastVector
16
+ @test b .+ SVector (1 ,2 ,3 ,4 ,5 ,6 ) isa BroadcastVector
17
+ @test SVector (1 ,2 ,3 ,4 ,5 ,6 ) .+ b isa BroadcastVector
18
+
19
+ A = randn (6 ,6 )
20
+ B = BroadcastArray (exp, A)
21
+
22
+ @test Matrix (B) == exp .(A)
23
+
24
+
25
+ C = BroadcastArray (+ , A, 2 )
26
+ @test C == A .+ 2
27
+ D = BroadcastArray (+ , A, C)
28
+ @test D == A + C
29
+
30
+ @test sum (B) ≈ sum (exp, A)
31
+ @test sum (C) ≈ sum (A .+ 2 )
32
+ @test prod (B) ≈ prod (exp, A)
33
+ @test prod (C) ≈ prod (A .+ 2 )
34
+
35
+ x = Vcat ([3 ,4 ], [1 ,1 ,1 ,1 ,1 ], 1 : 3 )
36
+ @test x .+ (1 : 10 ) isa Vcat
37
+ @test (1 : 10 ) .+ x isa Vcat
38
+ @test x + (1 : 10 ) isa Vcat
39
+ @test (1 : 10 ) + x isa Vcat
40
+ @test x .+ (1 : 10 ) == (1 : 10 ) .+ x == (1 : 10 ) + x == x + (1 : 10 ) == Vector (x) + (1 : 10 )
41
+
42
+ @test exp .(x) isa Vcat
43
+ @test exp .(x) == exp .(Vector (x))
44
+ @test x .+ 2 isa Vcat
45
+ @test (x .+ 2 ). args[end ] ≡ x. args[end ] .+ 2 ≡ 3 : 5
46
+ @test x .* 2 isa Vcat
47
+ @test 2 .+ x isa Vcat
48
+ @test 2 .* x isa Vcat
49
+
50
+ A = Vcat ([[1 2 ; 3 4 ]], [[4 5 ; 6 7 ]])
51
+ @test A .+ Ref (I) == Ref (I) .+ A == Vcat ([[2 2 ; 3 5 ]], [[5 5 ; 6 8 ]])
52
+
53
+ @test_broken BroadcastArray (* ,1.1 ,[1 2 ])[1 ] == 1.1
54
+
55
+ B = BroadcastArray (* , Diagonal (randn (5 )), randn (5 ,5 ))
56
+ @test B == broadcast (* ,B. args... )
57
+ @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
58
+ @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
59
+ @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
60
+ B = BroadcastArray (* , Diagonal (randn (5 )), 2 )
61
+ @test B == broadcast (* ,B. args... )
62
+ @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
63
+ @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
64
+ @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
65
+ B = BroadcastArray (* , Diagonal (randn (5 )), randn (5 ))
66
+ @test B == broadcast (* ,B. args... )
67
+ @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 1
68
+ @test colsupport (B,3 ) == rowsupport (B,3 ) == 3 : 3
69
+ @test colsupport (B,5 ) == rowsupport (B,5 ) == 5 : 5
70
+
71
+ B = BroadcastArray (+ , Diagonal (randn (5 )), 2 )
72
+ @test colsupport (B,1 ) == rowsupport (B,1 ) == 1 : 5
73
+ @test colsupport (B,3 ) == rowsupport (B,3 ) == 1 : 5
74
+ @test colsupport (B,5 ) == rowsupport (B,5 ) == 1 : 5
75
+ end
76
+
77
+ @testset " vector*matrix broadcasting #27" begin
78
+ H = [1. , 0. ]
79
+ @test Mul (H, H' ) .+ 1 == H* H' .+ 1
80
+ B = randn (2 ,2 )
81
+ @test Mul (H, H' ) .+ B == H* H' .+ B
82
+ end
83
+
84
+ @testset " BroadcastArray +" begin
85
+ a = BroadcastArray (+ , randn (400 ), randn (400 ))
86
+ b = similar (a)
87
+ copyto! (b, a)
88
+ if VERSION ≥ v " 1.1"
89
+ @test @allocated (copyto! (b, a)) == 0
90
+ end
91
+ @test b == a
92
+ end
93
+
94
+ @testset " Lazy range" begin
95
+ @test broadcasted (LazyArrayStyle {1} (), + , 1 : 5 ) ≡ 1 : 5
96
+ @test broadcasted (LazyArrayStyle {1} (), + , 1 , 1 : 5 ) ≡ 2 : 6
97
+ @test broadcasted (LazyArrayStyle {1} (), + , 1 : 5 , 1 ) ≡ 2 : 6
98
+
99
+ @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 )) ≡ Fill (2 ,5 )
100
+ @test broadcasted (LazyArrayStyle {1} (), + , 1 , Fill (2 ,5 )) ≡ Fill (3 ,5 )
101
+ @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), 1 ) ≡ Fill (3 ,5 )
102
+ @test broadcasted (LazyArrayStyle {1} (), + , Ref (1 ), Fill (2 ,5 )) ≡ Fill (3 ,5 )
103
+ @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), Ref (1 )) ≡ Fill (3 ,5 )
104
+ @test broadcasted (LazyArrayStyle {1} (), + , 1 , Fill (2 ,5 )) ≡ Fill (3 ,5 )
105
+ @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), Fill (3 ,5 )) ≡ Fill (5 ,5 )
106
+
107
+ @test broadcasted (LazyArrayStyle {1} (), * , Zeros (5 ), Zeros (5 )) ≡ Zeros (5 )
108
+ b = BroadcastArray (exp, randn (5 ))
109
+ @test b .* Zeros (5 ) ≡ Zeros (5 )
110
+ @test Zeros (5 ) .* b ≡ Zeros (5 )
111
+ end
112
+
113
+ @testset " Sub-broadcast" begin
114
+ A = BroadcastArray (exp,randn (5 ,5 ))
115
+ V = view (A, 1 : 2 ,2 : 3 )
116
+ @test MemoryLayout (typeof (V)) isa BroadcastLayout{typeof (exp)}
117
+ @test BroadcastArray (V) == A[1 : 2 ,2 : 3 ] == Array (A)[1 : 2 ,2 : 3 ]
118
+
119
+ B = BroadcastArray (- , randn (5 ,5 ), randn (5 ))
120
+ V = view (B, 1 : 2 ,2 : 3 )
121
+ @test MemoryLayout (typeof (V)) isa BroadcastLayout{typeof (- )}
122
+ @test BroadcastArray (V) == B[1 : 2 ,2 : 3 ] == Array (B)[1 : 2 ,2 : 3 ]
123
+ end
124
+
125
+ @testset " AdjTrans" begin
126
+ A = BroadcastArray (exp,randn (5 ,5 ))
127
+ @test MemoryLayout (typeof (transpose (A))) isa BroadcastLayout{typeof (exp)}
128
+ @test MemoryLayout (typeof (A' )) isa BroadcastLayout{typeof (exp)}
129
+ @test BroadcastArray (A' ) == BroadcastArray (transpose (A)) == A' == Array (A)'
130
+
131
+ B = BroadcastArray (- , randn (5 ,5 ), randn (5 ))
132
+ @test MemoryLayout (typeof (transpose (B))) isa BroadcastLayout{typeof (- )}
133
+ @test MemoryLayout (typeof (B' )) isa BroadcastLayout{typeof (- )}
134
+ @test BroadcastArray (B' ) == BroadcastArray (transpose (B)) == B' == Array (B)'
135
+
136
+ Vc = view (B' , 1 : 2 ,1 : 3 )
137
+ Vt = view (transpose (B), 1 : 2 ,1 : 3 )
138
+ @test MemoryLayout (typeof (Vc)) isa BroadcastLayout{typeof (- )}
139
+ @test MemoryLayout (typeof (Vt)) isa BroadcastLayout{typeof (- )}
140
+ @test arguments (Vc) == (B. args[1 ][1 : 3 ,1 : 2 ]' , permutedims (B. args[2 ][1 : 3 ]))
141
+ @test arguments (Vt) == (transpose (B. args[1 ][1 : 3 ,1 : 2 ]), permutedims (B. args[2 ][1 : 3 ]))
142
+ @test BroadcastArray (Vc) == BroadcastArray (Vt) == Vc == Vt == (Array (B)' )[1 : 2 ,1 : 3 ]
143
+
144
+ Vc = view (B,1 : 3 ,1 : 2 )'
145
+ Vt = transpose (view (B,1 : 3 ,1 : 2 ))
146
+ @test MemoryLayout (typeof (Vc)) isa BroadcastLayout{typeof (- )}
147
+ @test MemoryLayout (typeof (Vt)) isa BroadcastLayout{typeof (- )}
148
+ @test arguments (Vc) == (B. args[1 ][1 : 3 ,1 : 2 ]' , permutedims (B. args[2 ][1 : 3 ]))
149
+ @test arguments (Vt) == (transpose (B. args[1 ][1 : 3 ,1 : 2 ]), permutedims (B. args[2 ][1 : 3 ]))
150
+ @test BroadcastArray (Vc) == BroadcastArray (Vt) == Vc == (Array (B)' )[1 : 2 ,1 : 3 ]
87
151
end
88
- @test b == a
89
- end
90
-
91
- @testset " Lazy range" begin
92
- @test broadcasted (LazyArrayStyle {1} (), + , 1 : 5 ) ≡ 1 : 5
93
- @test broadcasted (LazyArrayStyle {1} (), + , 1 , 1 : 5 ) ≡ 2 : 6
94
- @test broadcasted (LazyArrayStyle {1} (), + , 1 : 5 , 1 ) ≡ 2 : 6
95
-
96
- @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 )) ≡ Fill (2 ,5 )
97
- @test broadcasted (LazyArrayStyle {1} (), + , 1 , Fill (2 ,5 )) ≡ Fill (3 ,5 )
98
- @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), 1 ) ≡ Fill (3 ,5 )
99
- @test broadcasted (LazyArrayStyle {1} (), + , Ref (1 ), Fill (2 ,5 )) ≡ Fill (3 ,5 )
100
- @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), Ref (1 )) ≡ Fill (3 ,5 )
101
- @test broadcasted (LazyArrayStyle {1} (), + , 1 , Fill (2 ,5 )) ≡ Fill (3 ,5 )
102
- @test broadcasted (LazyArrayStyle {1} (), + , Fill (2 ,5 ), Fill (3 ,5 )) ≡ Fill (5 ,5 )
103
-
104
- @test broadcasted (LazyArrayStyle {1} (), * , Zeros (5 ), Zeros (5 )) ≡ Zeros (5 )
105
- b = BroadcastArray (exp, randn (5 ))
106
- @test b .* Zeros (5 ) ≡ Zeros (5 )
107
- @test Zeros (5 ) .* b ≡ Zeros (5 )
108
152
end
0 commit comments