Skip to content

Commit

Permalink
Fix StackOverflow in the 'defaultalphas' function (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
eliascarv authored Jul 25, 2024
1 parent b4e3a00 commit dfc49c3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
16 changes: 9 additions & 7 deletions src/Colorfy.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export Colorfier, colorfy

# type alias to reduce typing
const Values{T} = AbstractVector{<:T}
const ValuesWithMissing{T} = AbstractVector{Union{Missing,T}}

"""
Colorfier(values; [alphas, colorscheme, colorrange])
Expand Down Expand Up @@ -103,14 +102,17 @@ colorrange(colorfier::Colorfier) = colorfier.colorrange
Default color alphas for `values`.
"""
defaultalphas(values::Values) = fill(1, length(values))

function defaultalphas(values::ValuesWithMissing)
function defaultalphas(values::Values)
minds = findall(ismissing, values)
vinds = setdiff(1:length(values), minds)
valphas = defaultalphas(nonmissingvec(values[vinds]))
malpha = zero(eltype(valphas))
genvec(vinds, valphas, minds, malpha, length(values))

if isempty(minds)
fill(1, length(values))
else
valphas = defaultalphas(nonmissingvec(values[vinds]))
malpha = zero(eltype(valphas))
genvec(vinds, valphas, minds, malpha, length(values))
end
end

defaultalphas(values::Values{Colorant}) = alpha.(values)
Expand Down
3 changes: 1 addition & 2 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,7 @@ using Test
colorfier = Colorfier(values)
@test_throws ArgumentError Colorfy.colors(colorfier)
values = Any[:red, :green, :blue] # vector with non-concrete eltype
alphas = rand(3)
colorfier = Colorfier(values; alphas)
colorfier = Colorfier(values)
@test_throws ArgumentError Colorfy.colors(colorfier)
end

Expand Down

0 comments on commit dfc49c3

Please sign in to comment.