-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathruntests.jl
77 lines (69 loc) · 2.44 KB
/
runtests.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using TransformsBase
using Test
@testset "TransformsBase.jl" begin
@test TransformsBase.isrevertible(Identity())
@test TransformsBase.isinvertible(Identity())
@test TransformsBase.inverse(Identity()) == Identity()
@test TransformsBase.inverse(Identity() → Identity()) == Identity()
@test (Identity() → Identity()) == Identity()
# test fallbacks
struct TestTransform <: TransformsBase.Transform end
TransformsBase.apply(::TestTransform, x) = x, nothing
T = TestTransform()
@test !TransformsBase.isrevertible(T)
@test !TransformsBase.isinvertible(T)
@test !TransformsBase.isrevertible(T → T)
@test !TransformsBase.isinvertible(T → T)
@test TransformsBase.assertions(T) |> isempty
@test TransformsBase.parameters(T) isa NamedTuple
@test TransformsBase.parameters(T) |> isempty
@test TransformsBase.preprocess(T, nothing) |> isnothing
@test TransformsBase.reapply(T, 1, nothing) == 1
# test optimizations
T = TestTransform() → TestTransform()
@test (T → Identity()) == T
@test (Identity() → T) == T
# sequential
T = TransformsBase.SequentialTransform([TestTransform(), Identity()])
# equality
@test T == T
# iteration interface
@test length(T) == 2
T1, state = iterate(T)
@test T1 == TestTransform()
T2, state = iterate(T, state)
@test T2 == Identity()
@test isnothing(iterate(T, state))
# indexing interface
@test T[1] == TestTransform()
@test T[2] == Identity()
@test firstindex(T) == 1
@test lastindex(T) == 2
@test T[begin] == TestTransform()
@test T[end] == Identity()
# equality and approximation
struct TestParamTransform <: TransformsBase.Transform
param::Float64
end
TransformsBase.apply(t::TestParamTransform, x) = x * t.param, nothing
TransformsBase.parameters(t::TestParamTransform) = (; param=t.param)
T1 = TestParamTransform(1.0)
T2 = TestParamTransform(1.0f0)
T3 = TestTransform()
@test T1 == T2
@test T1 ≠ T3
@test T1 ≈ T2
@test T1 ≉ T3
T1 = Identity()
T2 = TestTransform()
T3 = TestTransform() → TestTransform()
@test sprint(show, T1) == "Identity()"
@test sprint(show, MIME("text/plain"), T1) == "Identity transform"
@test sprint(show, T2) == "TestTransform()"
@test sprint(show, MIME("text/plain"), T2) == "TestTransform transform"
@test sprint(show, T3) == "TestTransform() → TestTransform()"
@test sprint(show, MIME("text/plain"), T3) == """
SequentialTransform
├─ TestTransform()
└─ TestTransform()"""
end