diff --git a/base/Enums.jl b/base/Enums.jl index f0a3c4c9f3a30..0b990721be717 100644 --- a/base/Enums.jl +++ b/base/Enums.jl @@ -206,6 +206,9 @@ macro enum(T::Union{Symbol,Expr}, syms...) Enums.namemap(::Type{$(esc(typename))}) = $(esc(namemap)) Base.typemin(x::Type{$(esc(typename))}) = $(esc(typename))($lo) Base.typemax(x::Type{$(esc(typename))}) = $(esc(typename))($hi) + let enum_hash = hash($(esc(typename))) + Base.hash(x::$(esc(typename)), h::UInt) = hash(enum_hash, hash(Integer(x), h)) + end let insts = (Any[ $(esc(typename))(v) for v in $values ]...,) Base.instances(::Type{$(esc(typename))}) = insts end diff --git a/test/enums.jl b/test/enums.jl index 5a83e1b4dfa42..e0c1fcc6bccc0 100644 --- a/test/enums.jl +++ b/test/enums.jl @@ -175,6 +175,10 @@ end end @test Int(haggis) == 4 +@enum HashEnum1 Enum1_a=1 +@enum HashEnum2 Enum2_a=1 +@test hash(Enum1_a) != hash(Enum2_a) + @test (Vector{Fruit}(undef, 3) .= apple) == [apple, apple, apple] # long, discongruous