Skip to content

Commit 06dca62

Browse files
Stephan SahmStephan Sahm
authored andcommitted
fixing promote_type for Const and Identity
1 parent c9e6322 commit 06dca62

3 files changed

Lines changed: 14 additions & 14 deletions

File tree

src/Const.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ Base.convert(::Type{Const{T}}, x::Const) where {T} = Const(Base.convert(T, x.val
3838
# Const is covariate
3939
# promote_rule only works on concrete types, more general checks Type{<:Const} may overwrite
4040
# unintentionally more specific promote_rule types
41-
promote_rule(::Type{Const{T}}, ::Type{Const{S}}) where {T, S<:T} = Const{T}
42-
promote_rule(::Type{Const{T}}, ::Type{Const}) where T = Const
43-
promote_rule(::Type{Const}, ::Type{Const}) = Const
41+
Base.promote_rule(::Type{Const{T}}, ::Type{Const{S}}) where {T, S<:T} = Const{T}
42+
Base.promote_rule(::Type{Const{T}}, ::Type{Const}) where T = Const
43+
Base.promote_rule(::Type{Const}, ::Type{Const}) = Const
4444

4545
# we need this for safety, if someone overwrites promote_typejoin for Unions with Const
4646
Base.promote_typejoin(::Type{Const{T}}, ::Type{Const{T}}) where T = Const{T}

src/Identity.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ Base.convert(::Type{Identity{T}}, x::Identity) where {T} = Identity(Base.convert
2727
# Identity is covariate
2828
# promote_rule only works on concrete types, more general checks Type{<:Const} may overwrite
2929
# unintentionally more specific promote_rule types
30-
promote_rule(::Type{Identity{T}}, ::Type{Identity{S}}) where {T, S<:T} = Identity{T}
31-
promote_rule(::Type{Identity{T}}, ::Type{Identity}) where T = Identity
32-
promote_rule(::Type{Identity}, ::Type{Identity}) = Identity
30+
Base.promote_rule(::Type{Identity{T}}, ::Type{Identity{S}}) where {T, S<:T} = Identity{T}
31+
Base.promote_rule(::Type{Identity{T}}, ::Type{Identity}) where T = Identity
32+
Base.promote_rule(::Type{Identity}, ::Type{Identity}) = Identity
3333

3434
# we need this for safety, if someone overwrites typejoin for Unions with Identiy
3535
Base.promote_typejoin(::Type{Identity{T}}, ::Type{Identity{T}}) where T = Identity{T}

test/promote_type.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@ using DataTypesBasic
55
# =====
66

77
@test promote_type(Const{Int}, Const{Number}) == Const{Number}
8-
@test promote_type(Const{Int}, Const) = Const
9-
@test promote_type(Const, Const) = Const
8+
@test promote_type(Const{Int}, Const) == Const
9+
@test promote_type(Const, Const) == Const
1010

1111
@test Base.promote_typejoin(Const{Number}, Const{Number}) == Const{Number}
1212
@test Base.promote_typejoin(Const{Int}, Const{Number}) == Const
13-
@test Base.promote_typejoin(Const{Int}, Const) = Const
14-
@test Base.promote_typejoin(Const, Const) = Const
13+
@test Base.promote_typejoin(Const{Int}, Const) == Const
14+
@test Base.promote_typejoin(Const, Const) == Const
1515

1616
# Identity
1717
# ========
1818

1919
@test promote_type(Identity{Int}, Identity{Number}) == Identity{Number}
20-
@test promote_type(Identity{Int}, Identity) = Identity
21-
@test promote_type(Identity, Identity) = Identity
20+
@test promote_type(Identity{Int}, Identity) == Identity
21+
@test promote_type(Identity, Identity) == Identity
2222

2323
@test Base.promote_typejoin(Identity{Number}, Identity{Number}) == Identity{Number}
2424
@test Base.promote_typejoin(Identity{Int}, Identity{Number}) == Identity
25-
@test Base.promote_typejoin(Identity{Int}, Identity) = Identity
26-
@test Base.promote_typejoin(Identity, Identity) = Identity
25+
@test Base.promote_typejoin(Identity{Int}, Identity) == Identity
26+
@test Base.promote_typejoin(Identity, Identity) == Identity
2727

2828

2929
# Option

0 commit comments

Comments
 (0)