@@ -451,29 +451,49 @@ end
451451 @test [1 ,2 ,3 ]* Zeros (1 ,3 ) ≡ Zeros (3 ,3 )
452452 @test_throws MethodError [1 ,2 ,3 ]* Zeros (3 ) # Not defined for [1,2,3]*[0,0,0] either
453453
454- # Check multiplication by Adjoint vectors works as expected.
455- @test randn (4 , 3 )' * Zeros (4 ) === Zeros (3 )
456- @test randn (4 )' * Zeros (4 ) === zero (Float64)
457- @test [1 , 2 , 3 ]' * Zeros {Int} (3 ) === zero (Int)
458- @test [SVector (1 ,2 )' , SVector (2 ,3 )' , SVector (3 ,4 )' ]' * Zeros {Int} (3 ) === SVector (0 ,0 )
459- @test_throws DimensionMismatch randn (4 )' * Zeros (3 )
460-
461- # Check multiplication by Transpose-d vectors works as expected.
462- @test transpose (randn (4 , 3 )) * Zeros (4 ) === Zeros (3 )
463- @test transpose (randn (4 )) * Zeros (4 ) === zero (Float64)
464- @test transpose ([1 , 2 , 3 ]) * Zeros {Int} (3 ) === zero (Int)
465- @test_throws DimensionMismatch transpose (randn (4 )) * Zeros (3 )
466-
467- @test + (Zeros {Float64} (3 , 5 )) === Zeros {Float64} (3 , 5 )
468- @test - (Zeros {Float32} (5 , 2 )) === Zeros {Float32} (5 , 2 )
469-
470- # `Zeros` are closed under addition and subtraction (both unary and binary).
454+ @testset " Check multiplication by Adjoint vectors works as expected." begin
455+ @test randn (4 , 3 )' * Zeros (4 ) === Zeros (3 )
456+ @test randn (4 )' * Zeros (4 ) === zero (Float64)
457+ @test [1 , 2 , 3 ]' * Zeros {Int} (3 ) === zero (Int)
458+ @test [SVector (1 ,2 )' , SVector (2 ,3 )' , SVector (3 ,4 )' ]' * Zeros {Int} (3 ) === SVector (0 ,0 )
459+ @test_throws DimensionMismatch randn (4 )' * Zeros (3 )
460+ @test Zeros (5 )' * randn (5 ,3 ) ≡ Zeros (5 )' * Zeros (5 ,3 ) ≡ Zeros (5 )' * Ones (5 ,3 ) ≡ Zeros (3 )'
461+ @test Zeros (5 )' * randn (5 ) ≡ Zeros (5 )' * Zeros (5 ) ≡ Zeros (5 )' * Ones (5 ) ≡ 0.0
462+ @test Zeros (5 ) * Zeros (6 )' ≡ Zeros (5 ,1 ) * Zeros (6 )' ≡ Zeros (5 ,6 )
463+ @test randn (5 ) * Zeros (6 )' ≡ randn (5 ,1 ) * Zeros (6 )' ≡ Zeros (5 ,6 )
464+ @test Zeros (5 ) * randn (6 )' ≡ Zeros (5 ,6 )
465+
466+ @test ([[1 ,2 ]])' * Zeros {SVector{2,Int}} (1 ) ≡ 0
467+ @test_broken ([[1 ,2 ,3 ]])' * Zeros {SVector{2,Int}} (1 )
468+ end
469+
470+ @testset " Check multiplication by Transpose-d vectors works as expected." begin
471+ @test transpose (randn (4 , 3 )) * Zeros (4 ) === Zeros (3 )
472+ @test transpose (randn (4 )) * Zeros (4 ) === zero (Float64)
473+ @test transpose ([1 , 2 , 3 ]) * Zeros {Int} (3 ) === zero (Int)
474+ @test_throws DimensionMismatch transpose (randn (4 )) * Zeros (3 )
475+ @test transpose (Zeros (5 )) * randn (5 ,3 ) ≡ transpose (Zeros (5 ))* Zeros (5 ,3 ) ≡ transpose (Zeros (5 ))* Ones (5 ,3 ) ≡ transpose (Zeros (3 ))
476+ @test transpose (Zeros (5 )) * randn (5 ) ≡ transpose (Zeros (5 )) * Zeros (5 ) ≡ transpose (Zeros (5 )) * Ones (5 ) ≡ 0.0
477+ @test randn (5 ) * transpose (Zeros (6 )) ≡ randn (5 ,1 ) * transpose (Zeros (6 )) ≡ Zeros (5 ,6 )
478+ @test Zeros (5 ) * transpose (randn (6 )) ≡ Zeros (5 ,6 )
479+ @test transpose (randn (5 )) * Zeros (5 ) ≡ 0.0
480+
481+ @test transpose ([[1 ,2 ]]) * Zeros {SVector{2,Int}} (1 ) ≡ 0
482+ @test_broken transpose ([[1 ,2 ,3 ]]) * Zeros {SVector{2,Int}} (1 )
483+ end
484+
471485 z1, z2 = Zeros {Float64} (4 ), Zeros {Int} (4 )
472- @test + (z1) === z1
473- @test - (z1) === z1
474486
475- test_addition_and_subtraction ([z1, z2], [z1, z2], Zeros)
476- test_addition_and_subtraction_dim_mismatch (z1, Zeros {Float64} (4 , 2 ))
487+ @testset " `Zeros` are closed under addition and subtraction (both unary and binary)." begin
488+ @test + (Zeros {Float64} (3 , 5 )) === Zeros {Float64} (3 , 5 )
489+ @test - (Zeros {Float32} (5 , 2 )) === Zeros {Float32} (5 , 2 )
490+
491+ @test + (z1) === z1
492+ @test - (z1) === z1
493+
494+ test_addition_and_subtraction ([z1, z2], [z1, z2], Zeros)
495+ test_addition_and_subtraction_dim_mismatch (z1, Zeros {Float64} (4 , 2 ))
496+ end
477497
478498 # `Zeros` +/- `Fill`s should yield `Fills`.
479499 fill1, fill2 = Fill (5.0 , 4 ), Fill (5 , 4 )
@@ -502,36 +522,41 @@ end
502522 @test op (Zeros {Float64} (4 , 5 ), Zeros {Int} (4 , 5 )) === Zeros {Float64} (4 , 5 )
503523 end
504524
505- # Zeros +/- dense where + / - have different results.
506- @test + (Zeros (3 , 5 ), X) == X && + (X, Zeros (3 , 5 )) == X
507- @test ! (Zeros (3 , 5 ) + X === X) && ! (X + Zeros (3 , 5 ) === X)
508- @test - (Zeros (3 , 5 ), X) == - X
509-
510- # Addition with different eltypes.
511- @test + (Zeros {Float32} (3 , 5 ), X) isa Matrix{Float64}
512- @test ! (+ (Zeros {Float32} (3 , 5 ), X) === X)
513- @test + (Zeros {Float32} (3 , 5 ), X) == X
514- @test ! (+ (Zeros {ComplexF64} (3 , 5 ), X) === X)
515- @test + (Zeros {ComplexF64} (3 , 5 ), X) == X
516-
517- # Subtraction with different eltypes.
518- @test - (Zeros {Float32} (3 , 5 ), X) isa Matrix{Float64}
519- @test - (Zeros {Float32} (3 , 5 ), X) == - X
520- @test - (Zeros {ComplexF64} (3 , 5 ), X) == - X
521-
522- # Tests for ranges.
523- X = randn (5 )
524- @test ! (Zeros (5 ) + X === X)
525- @test Zeros {Int} (5 ) + (1 : 5 ) === (1 : 5 ) && (1 : 5 ) + Zeros {Int} (5 ) === (1 : 5 )
526- @test Zeros (5 ) + (1 : 5 ) === (1.0 : 1.0 : 5.0 ) && (1 : 5 ) + Zeros (5 ) === (1.0 : 1.0 : 5.0 )
527- @test (1 : 5 ) - Zeros {Int} (5 ) === (1 : 5 )
528- @test Zeros {Int} (5 ) - (1 : 5 ) === - 1 : - 1 : - 5
529- @test Zeros (5 ) - (1 : 5 ) === - 1.0 : - 1.0 : - 5.0
530-
531- # test Base.zero
532- @test zero (Zeros (10 )) == Zeros (10 )
533- @test zero (Ones (10 ,10 )) == Zeros (10 ,10 )
534- @test zero (Fill (0.5 , 10 , 10 )) == Zeros (10 ,10 )
525+ @testset " Zeros +/- dense where + / - have different results." begin
526+ @test + (Zeros (3 , 5 ), X) == X && + (X, Zeros (3 , 5 )) == X
527+ @test ! (Zeros (3 , 5 ) + X === X) && ! (X + Zeros (3 , 5 ) === X)
528+ @test - (Zeros (3 , 5 ), X) == - X
529+ end
530+
531+ @testset " Addition with different eltypes." begin
532+ @test + (Zeros {Float32} (3 , 5 ), X) isa Matrix{Float64}
533+ @test ! (+ (Zeros {Float32} (3 , 5 ), X) === X)
534+ @test + (Zeros {Float32} (3 , 5 ), X) == X
535+ @test ! (+ (Zeros {ComplexF64} (3 , 5 ), X) === X)
536+ @test + (Zeros {ComplexF64} (3 , 5 ), X) == X
537+ end
538+
539+ @testset " Subtraction with different eltypes." begin
540+ @test - (Zeros {Float32} (3 , 5 ), X) isa Matrix{Float64}
541+ @test - (Zeros {Float32} (3 , 5 ), X) == - X
542+ @test - (Zeros {ComplexF64} (3 , 5 ), X) == - X
543+ end
544+
545+ @testset " Tests for ranges." begin
546+ X = randn (5 )
547+ @test ! (Zeros (5 ) + X === X)
548+ @test Zeros {Int} (5 ) + (1 : 5 ) === (1 : 5 ) && (1 : 5 ) + Zeros {Int} (5 ) === (1 : 5 )
549+ @test Zeros (5 ) + (1 : 5 ) === (1.0 : 1.0 : 5.0 ) && (1 : 5 ) + Zeros (5 ) === (1.0 : 1.0 : 5.0 )
550+ @test (1 : 5 ) - Zeros {Int} (5 ) === (1 : 5 )
551+ @test Zeros {Int} (5 ) - (1 : 5 ) === - 1 : - 1 : - 5
552+ @test Zeros (5 ) - (1 : 5 ) === - 1.0 : - 1.0 : - 5.0
553+ end
554+
555+ @testset " test Base.zero" begin
556+ @test zero (Zeros (10 )) == Zeros (10 )
557+ @test zero (Ones (10 ,10 )) == Zeros (10 ,10 )
558+ @test zero (Fill (0.5 , 10 , 10 )) == Zeros (10 ,10 )
559+ end
535560end
536561
537562@testset " maximum/minimum/svd/sort" begin
@@ -1135,25 +1160,7 @@ end
11351160 @test E* (1 : 5 ) ≡ 1.0 : 5.0
11361161 @test (1 : 5 )' E == (1.0 : 5 )'
11371162 @test E* E ≡ E
1138- end
1139-
1140- @testset " count" begin
1141- @test count (Ones {Bool} (10 )) == count (Fill (true ,10 )) == 10
1142- @test count (Zeros {Bool} (10 )) == count (Fill (false ,10 )) == 0
1143- @test count (x -> 1 ≤ x < 2 , Fill (1.3 ,10 )) == 10
1144- @test count (x -> 1 ≤ x < 2 , Fill (2.0 ,10 )) == 0
1145- end
1146-
1147- @testset " norm" begin
1148- for a in (Zeros {Int} (5 ), Zeros (5 ,3 ), Zeros (2 ,3 ,3 ),
1149- Ones {Int} (5 ), Ones (5 ,3 ), Ones (2 ,3 ,3 ),
1150- Fill (2.3 ,5 ), Fill ([2.3 ,4.2 ],5 ), Fill (4 )),
1151- p in (- Inf , 0 , 0.1 , 1 , 2 , 3 , Inf )
1152- @test norm (a,p) ≈ norm (Array (a),p)
1153- end
1154- end
11551163
1156- @testset " multiplication" begin
11571164 for T in (Float64, ComplexF64)
11581165 fv = T == Float64 ? Float64 (1.6 ) : ComplexF64 (1.6 , 1.3 )
11591166 n = 10
@@ -1172,6 +1179,22 @@ end
11721179 end
11731180end
11741181
1182+ @testset " count" begin
1183+ @test count (Ones {Bool} (10 )) == count (Fill (true ,10 )) == 10
1184+ @test count (Zeros {Bool} (10 )) == count (Fill (false ,10 )) == 0
1185+ @test count (x -> 1 ≤ x < 2 , Fill (1.3 ,10 )) == 10
1186+ @test count (x -> 1 ≤ x < 2 , Fill (2.0 ,10 )) == 0
1187+ end
1188+
1189+ @testset " norm" begin
1190+ for a in (Zeros {Int} (5 ), Zeros (5 ,3 ), Zeros (2 ,3 ,3 ),
1191+ Ones {Int} (5 ), Ones (5 ,3 ), Ones (2 ,3 ,3 ),
1192+ Fill (2.3 ,5 ), Fill ([2.3 ,4.2 ],5 ), Fill (4 )),
1193+ p in (- Inf , 0 , 0.1 , 1 , 2 , 3 , Inf )
1194+ @test norm (a,p) ≈ norm (Array (a),p)
1195+ end
1196+ end
1197+
11751198@testset " dot products" begin
11761199 n = 15
11771200 o = Ones (1 : n)
@@ -1187,6 +1210,17 @@ end
11871210 @test dot (u, 2 D, v) == 2 dot (u, v)
11881211 @test dot (u, Z, v) == 0
11891212
1213+ @test dot (Zeros (5 ), Zeros {ComplexF16} (5 )) ≡ zero (ComplexF64)
1214+ @test dot (Zeros (5 ), Ones {ComplexF16} (5 )) ≡ zero (ComplexF64)
1215+ @test dot (Ones {ComplexF16} (5 ), Zeros (5 )) ≡ zero (ComplexF64)
1216+ @test dot (randn (5 ), Zeros {ComplexF16} (5 )) ≡ dot (Zeros {ComplexF16} (5 ), randn (5 )) ≡ zero (ComplexF64)
1217+
1218+ @test dot (Fill (1 ,5 ), Fill (2.0 ,5 )) ≡ 10.0
1219+
1220+ let N = 2 ^ big (1000 ) # fast dot for fast sum
1221+ @test dot (Fill (2 ,N),1 : N) == dot (Fill (2 ,N),1 : N) == dot (1 : N,Fill (2 ,N)) == 2 * sum (1 : N)
1222+ end
1223+
11901224 @test_throws DimensionMismatch dot (u[1 : end - 1 ], D, v)
11911225 @test_throws DimensionMismatch dot (u[1 : end - 1 ], D, v[1 : end - 1 ])
11921226
@@ -1195,6 +1229,9 @@ end
11951229
11961230 @test_throws DimensionMismatch dot (u, Z, v[1 : end - 1 ])
11971231 @test_throws DimensionMismatch dot (u, Z, v[1 : end - 1 ])
1232+
1233+ @test_throws DimensionMismatch dot (Zeros (5 ), Zeros (6 ))
1234+ @test_throws DimensionMismatch dot (Zeros (5 ), randn (6 ))
11981235end
11991236
12001237@testset " print" begin
0 commit comments