diff --git a/src/BitFlags.jl b/src/BitFlags.jl index cfc606d..9c939f5 100644 --- a/src/BitFlags.jl +++ b/src/BitFlags.jl @@ -239,6 +239,9 @@ macro bitflag(T::Union{Symbol,Expr}, syms...) BitFlags.haszero(::Type{$(esc(typename))}) = $(esc(maskzero)) Base.typemin(x::Type{$(esc(typename))}) = $(esc(typename))($lo) Base.typemax(x::Type{$(esc(typename))}) = $(esc(typename))($hi) + let flag_hash = hash($(esc(typename))) + Base.hash(x::$(esc(typename)), h::UInt) = hash(flag_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/runtests.jl b/test/runtests.jl index 260092a..51db6df 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -62,6 +62,10 @@ end @test Flag1(7) & flag1a == flag1a @test flag1a < flag1b < flag1c @test flag1a | flag1b < flag1c + + # Hashing + @test Int(flag2a) == Int(flag3a) # same numerical value, but + @test hash(flag2a) != hash(flag3a) # unique hashes as BitFlag #end #@testset "Type properties" begin