Skip to content

Commit 4a85ce8

Browse files
authored
Implement Iteration interface and Indexing interface for 'SequentialTransform' (#6)
1 parent 3ae4084 commit 4a85ce8

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/sequential.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ Create a [`SequentialTransform`](@ref) transform with
6868
AbstractTrees.nodevalue(::SequentialTransform) = SequentialTransform
6969
AbstractTrees.children(s::SequentialTransform) = s.transforms
7070

71+
# iteration interface
72+
Base.length(s::SequentialTransform) = length(s.transforms)
73+
Base.iterate(s::SequentialTransform, args...) = iterate(s.transforms, args...)
74+
75+
# indexing interface
76+
Base.getindex(s::SequentialTransform, i) = getindex(s.transforms, i)
77+
Base.firstindex(s::SequentialTransform) = firstindex(s.transforms)
78+
Base.lastindex(s::SequentialTransform) = lastindex(s.transforms)
79+
7180
Base.show(io::IO, s::SequentialTransform) = print(io, join(s.transforms, ""))
7281

7382
function Base.show(io::IO, ::MIME"text/plain", s::SequentialTransform)

test/runtests.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,21 @@ using Test
2626
T = TestTransform() TestTransform()
2727
@test (T Identity()) == T
2828
@test (Identity() T) == T
29+
30+
# sequential
31+
T = TransformsBase.SequentialTransform([TestTransform(), Identity()])
32+
# iteration interface
33+
@test length(T) == 2
34+
T1, state = iterate(T)
35+
@test T1 == TestTransform()
36+
T2, state = iterate(T, state)
37+
@test T2 == Identity()
38+
@test isnothing(iterate(T, state))
39+
# indexing interface
40+
@test T[1] == TestTransform()
41+
@test T[2] == Identity()
42+
@test firstindex(T) == 1
43+
@test lastindex(T) == 2
44+
@test T[begin] == TestTransform()
45+
@test T[end] == Identity()
2946
end

0 commit comments

Comments
 (0)