Skip to content

Commit c590a3e

Browse files
committed
improve inference
1 parent 362364f commit c590a3e

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

src/getsetall.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ getall(obj, ::Properties) = getproperties(obj) |> values
3131
getall(obj, o::If) = o.modify_condition(obj) ? (obj,) : ()
3232
getall(obj, f) = (f(obj),)
3333

34-
setall(obj, ::Properties, vs::Tuple) = setproperties(obj, NamedTuple{propertynames(obj)}(vs))
35-
setall(obj::NamedTuple{NS}, ::Elements, vs::Tuple) where {NS} = NamedTuple{NS}(vs)
36-
setall(obj::NTuple{N, Any}, ::Elements, vs) where {N} = (@assert length(vs) == N; Tuple(vs))
34+
function setall(obj, ::Properties, vs)
35+
names = propertynames(obj)
36+
setproperties(obj, NamedTuple{names}(NTuple{length(names)}(vs)))
37+
end
38+
setall(obj::NamedTuple{NS}, ::Elements, vs) where {NS} = NamedTuple{NS}(NTuple{length(NS)}(vs))
39+
setall(obj::NTuple{N, Any}, ::Elements, vs) where {N} = (@assert length(vs) == N; NTuple{N}(vs))
3740
setall(obj::AbstractArray, ::Elements, vs::AbstractArray) = (@assert length(obj) == length(vs); reshape(vs, size(obj)))
3841
setall(obj::AbstractArray, ::Elements, vs) = setall(obj, Elements(), collect(vs))
3942
setall(obj, o::If, vs) = error("Not supported")

test/test_getsetall.jl

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,20 @@ if VERSION >= v"1.6" # for ComposedFunction
6666
end
6767

6868
@testset "setall" begin
69-
@test (2,) === @inferred setall((1,), Elements(), (2,))
70-
@test (2,) === setall((1,), Elements(), [2,])
71-
@test [2,] == @inferred setall([1,], Elements(), (2,))
72-
@test [2,] == @inferred setall([1,], Elements(), [2,])
69+
for o in [Elements(), Properties()]
70+
@test (a=2, b=3) === @inferred setall((a=1, b="2"), o, (2, 3))
71+
@test (a=2, b="3") === @inferred setall((a=1, b="2"), o, (2, "3"))
72+
@test (a=2, b=3) === @inferred setall((a=1, b="2"), o, [2, 3])
73+
end
74+
@test (2, 3) === @inferred setall((1, "2"), Elements(), (2, 3))
75+
@test (2, "3") === @inferred setall((1, "2"), Elements(), (2, "3"))
76+
@test (2, 3) === @inferred setall((1, "2"), Elements(), [2, 3])
77+
@test [2, 3] == @inferred setall([1, "2"], Elements(), (2, 3))
78+
@test [2, "3"] == @inferred setall([1, "2"], Elements(), (2, "3"))
79+
@test [2, 3] == @inferred setall([1, "2"], Elements(), [2, 3])
7380

7481
obj = (a=1, b=2.0, c='3')
7582
@test (a="aa", b=2.0, c='3') === @inferred setall(obj, @optic(_.a), ("aa",))
76-
@test (a="aa", b=1, c='5') === @inferred setall(obj, Properties(), ("aa", 1, '5'))
77-
@test (a="aa", b=1, c='5') === @inferred setall(obj, Elements(), ("aa", 1, '5'))
7883
@test (a=9, b=19.0, c='4') === @inferred setall(obj, @optic(_ |> Elements() |> _ + 1), (10, 20.0, '5'))
7984

8085
obj = (a=1, b=((c=3, d=4), (c=5, d=6)))

0 commit comments

Comments
 (0)