diff --git a/Project.toml b/Project.toml index 44a5e5e8..c4182cfd 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.2.1" +version = "1.3.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/FillArrays.jl b/src/FillArrays.jl index af3ee9af..5ba58b82 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -434,6 +434,12 @@ const Eye{T,Axes} = RectOrDiagonal{T,Ones{T,1,Tuple{Axes}}} isone(::SquareEye) = true +function diag(E::Eye, k::Integer=0) + v = k == 0 ? oneunit(eltype(E)) : zero(eltype(E)) + len = length(diagind(E, k)) + Fill(v, len) +end + # These should actually be in StdLib, LinearAlgebra.jl, for all Diagonal for f in (:permutedims, :triu, :triu!, :tril, :tril!, :copy) @eval ($f)(IM::Diagonal{<:Any,<:AbstractFill}) = IM diff --git a/test/runtests.jl b/test/runtests.jl index df8d25db..22a0d2c6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -470,6 +470,13 @@ end @test Diagonal(Eye(8,5)) == Diagonal(ones(5)) @test convert(Diagonal, Eye(5)) == Diagonal(ones(5)) @test convert(Diagonal{Int}, Eye(5)) == Diagonal(ones(Int,5)) + + for E in (Eye(2,4), Eye(3)) + M = collect(E) + for i in -5:5 + @test diag(E, i) == diag(M, i) + end + end end @testset "one" begin