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 ]
87151 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 )
108152end
0 commit comments