Skip to content

Commit 6ed6806

Browse files
define haskey/hasproperty on Composite (#249)
* define haskey/hasproperty on Composite * Update test/differentials/composite.jl Co-authored-by: Lyndon White <oxinabox@ucc.asn.au> * Update test/differentials/composite.jl Co-authored-by: Lyndon White <oxinabox@ucc.asn.au>
1 parent 04a92fc commit 6ed6806

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ChainRulesCore"
22
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
3-
version = "0.9.17"
3+
version = "0.9.18"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/differentials/composite.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ end
8282
Base.keys(comp::Composite) = keys(backing(comp))
8383
Base.propertynames(comp::Composite) = propertynames(backing(comp))
8484

85+
Base.haskey(comp::Composite, key) = haskey(backing(comp), key)
86+
if isdefined(Base, :hasproperty)
87+
Base.hasproperty(comp::Composite, key::Symbol) = hasproperty(backing(comp), key)
88+
end
89+
8590
Base.iterate(comp::Composite, args...) = iterate(backing(comp), args...)
8691
Base.length(comp::Composite) = length(backing(comp))
8792
Base.eltype(::Type{<:Composite{<:Any, T}}) where T = eltype(T)

test/differentials/composite.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ end
4848
@testset "indexing, iterating, and properties" begin
4949
@test keys(Composite{Foo}(x=2.5)) == (:x,)
5050
@test propertynames(Composite{Foo}(x=2.5)) == (:x,)
51+
@test haskey(Composite{Foo}(x=2.5), :x) == true
52+
if isdefined(Base, :hasproperty)
53+
@test hasproperty(Composite{Foo}(x=2.5), :y) == false
54+
end
5155
@test Composite{Foo}(x=2.5).x == 2.5
5256

5357
@test keys(Composite{Tuple{Float64,}}(2.0)) == Base.OneTo(1)
@@ -56,6 +60,10 @@ end
5660
@test getproperty(Composite{Tuple{Float64,}}(@thunk 2.0^2), 1) == 4.0
5761
@test getproperty(Composite{Tuple{Float64,}}(a=(@thunk 2.0^2),), :a) == 4.0
5862

63+
# TODO: uncomment this once https://github.com/JuliaLang/julia/issues/35516
64+
@test_broken haskey(Composite{Tuple{Float64}}(2.0), 1) == true
65+
@test_broken hasproperty(Composite{Tuple{Float64}}(2.0), 2) == false
66+
5967
@test length(Composite{Foo}(x=2.5)) == 1
6068
@test length(Composite{Tuple{Float64,}}(2.0)) == 1
6169

0 commit comments

Comments
 (0)