Dan and/or Seth, can you try that again and check if hash(foos[1]) and hash(foos[2]) have the same last hex digit?
On Thu, Jul 16, 2015 at 11:30 AM, Matt Bauman <[email protected]> wrote: > Bizarre. I happen to have last updated on *exactly* the same commit SHA, > but I'm seeing the original (expected) behavior: > > $ julia -q > julia> versioninfo() > Julia Version 0.4.0-dev+5860 > Commit 7fa43ed (2015-07-08 20:57 UTC) > Platform Info: > System: Darwin (x86_64-apple-darwin14.3.0) > CPU: Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz > WORD_SIZE: 64 > BLAS: libopenblas (USE64BITINT NO_AFFINITY NEHALEM) > LAPACK: libopenblas > LIBM: libopenlibm > LLVM: libLLVM-3.3 > > julia> type Foo > x::Int > end > > julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x > == (generic function with 109 methods) > > julia> unique([Foo(4),Foo(4)]) > 2-element Array{Foo,1}: > Foo(4) > Foo(4) > > julia> @which hash(Foo(4), zero(UInt)) > hash(x::ANY, h::UInt64) at hashing.jl:10 > > Might there be some package that changes this behavior? Is the result of > `@which > hash(Foo(4), zero(Uint))` the same as what I show above? > > > On Thursday, July 16, 2015 at 11:02:46 AM UTC-4, Seth wrote: >> >> I can confirm this works as described by milktrader on 0.4.0-dev+5860 >> (2015-07-08 20:57 UTC) Commit 7fa43ed (7 days old master). >> >> julia> unique(foos) >> 1-element Array{Foo,1}: >> Foo(4) >> >> >> On Thursday, July 16, 2015 at 7:52:03 AM UTC-7, Stefan Karpinski wrote: >>> >>> I don't see that on 0.4-dev – it also doesn't seem possible without >>> having defined a hash method since unique is implemented with a dict. >>> >>> On Thu, Jul 16, 2015 at 10:29 AM, milktrader <[email protected]> wrote: >>> >>>> Julia 0.4- has different behavior ... >>>> >>>> First, with 0.3.9 >>>> >>>> julia> versioninfo() >>>> Julia Version 0.3.9 >>>> Commit 31efe69 (2015-05-30 11:24 UTC) >>>> Platform Info: >>>> System: Darwin (x86_64-apple-darwin13.4.0) >>>> CPU: Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz >>>> WORD_SIZE: 64 >>>> BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Penryn) >>>> LAPACK: libopenblas >>>> LIBM: libopenlibm >>>> LLVM: libLLVM-3.3 >>>> >>>> julia> type Foo >>>> x::Int >>>> end >>>> >>>> julia> import Base: == >>>> >>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x >>>> == (generic function with 80 methods) >>>> >>>> julia> foos = [Foo(4), Foo(4)] >>>> 2-element Array{Foo,1}: >>>> Foo(4) >>>> Foo(4) >>>> >>>> julia> unique(foos) >>>> 2-element Array{Foo,1}: >>>> Foo(4) >>>> Foo(4) >>>> >>>> julia> unique(foos)[1] == unique(foos)[2] >>>> true >>>> >>>> And now 0.4-dev >>>> >>>> julia> versioninfo() >>>> Julia Version 0.4.0-dev+5587 >>>> Commit 78760e2 (2015-06-25 14:27 UTC) >>>> Platform Info: >>>> System: Darwin (x86_64-apple-darwin13.4.0) >>>> CPU: Intel(R) Core(TM)2 Duo CPU P7350 @ 2.00GHz >>>> WORD_SIZE: 64 >>>> BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Penryn) >>>> LAPACK: libopenblas >>>> LIBM: libopenlibm >>>> LLVM: libLLVM-3.3 >>>> >>>> julia> type Foo >>>> x::Int >>>> end >>>> >>>> julia> import Base: == >>>> >>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x >>>> == (generic function with 108 methods) >>>> >>>> julia> foos = [Foo(4), Foo(4)] >>>> 2-element Array{Foo,1}: >>>> Foo(4) >>>> Foo(4) >>>> >>>> julia> unique(foos) >>>> 1-element Array{Foo,1}: >>>> Foo(4) >>>> >>>> julia> unique(foos)[1] == unique(foos)[2] >>>> ERROR: BoundsError: attempt to access 1-element Array{Foo,1}: >>>> Foo(4) >>>> at index [2] >>>> in getindex at array.jl:292 >>>> >>>> >>>> >>>> On Thursday, July 16, 2015 at 9:36:21 AM UTC-4, Stefan Karpinski wrote: >>>>> >>>>> You need to also define a hash method for this type. >>>>> >>>>> >>>>> On Jul 16, 2015, at 9:16 AM, Marc Gallant <[email protected]> >>>>> wrote: >>>>> >>>>> The unique function doesn't appear to work using iterables of custom >>>>> composite types, e.g., >>>>> >>>>> julia> type Foo >>>>> x::Int >>>>> end >>>>> >>>>> julia> import Base: == >>>>> >>>>> julia> ==(f1::Foo, f2::Foo) = f1.x == f2.x >>>>> == (generic function with 85 methods) >>>>> >>>>> julia> unique(foos) >>>>> 2-element Array{Foo,1}: >>>>> Foo(4) >>>>> Foo(4) >>>>> >>>>> julia> unique(foos)[1] == unique(foos)[2] >>>>> true >>>>> >>>>> >>>>> Is this the intended behaviour? >>>>> >>>>> >>>
