Skip to content

Commit a6f4411

Browse files
committed
add more tests
1 parent 17d4211 commit a6f4411

File tree

2 files changed

+60
-33
lines changed

2 files changed

+60
-33
lines changed

src/basic.jl

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export Space, SpaceStyle, DiscreteSpaceStyle, ContinuousSpaceStyle
1+
export Space, SpaceStyle, DiscreteSpaceStyle, ContinuousSpaceStyle, TupleSpace, NamedSpace, DictSpace
22

33
using Random
44

@@ -12,10 +12,6 @@ Space(x, dims::Int...) = Space(fill(x, dims))
1212
Space(x::Type{T}, dims::Int...) where {T<:Integer} = Space(fill(typemin(x):typemax(T), dims))
1313
Space(x::Type{T}, dims::Int...) where {T<:AbstractFloat} = Space(fill(typemin(x) .. typemax(T), dims))
1414

15-
const TupleSpace = Tuple{Vararg{<:Space}}
16-
const NamedSpace = NamedTuple{<:Any,<:TupleSpace}
17-
const DictSpace = Dict{<:Any,<:Space}
18-
1915
Base.size(s::Space) = size(SpaceStyle(s))
2016

2117
#####
@@ -71,4 +67,17 @@ function Random.rand(rng::AbstractRNG, s::Interval{:closed,:closed,T}) where {T}
7167

7268
r * (s.right - s.left) + s.left
7369
end
74-
end
70+
end
71+
72+
#####
73+
74+
const TupleSpace = Tuple{Vararg{<:Space}}
75+
const NamedSpace = NamedTuple{<:Any,<:TupleSpace}
76+
const DictSpace = Dict{<:Any,<:Space}
77+
78+
Random.rand(rng::AbstractRNG, s::Union{TupleSpace,NamedSpace}) = map(x -> rand(rng, x), s)
79+
Random.rand(rng::AbstractRNG, s::DictSpace) = Dict(k => rand(rng, s[k]) for k in keys(s))
80+
81+
Base.in(xs::Tuple, ts::TupleSpace) = length(xs) == length(ts) && all(((x, s),) -> x in s, zip(xs, ts))
82+
Base.in(xs::NamedTuple{names}, ns::NamedTuple{names,<:TupleSpace}) where {names} = all(((x, s),) -> x in s, zip(xs, ns))
83+
Base.in(xs::Dict, ds::DictSpace) = length(xs) == length(ds) && all(k -> haskey(ds, k) && xs[k] in ds[k], keys(xs))

test/runtests.jl

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,54 @@ using CommonRLSpaces
22
using Test
33

44
@testset "CommonRLSpaces.jl" begin
5-
s1 = Space((:cat, :dog))
6-
@test :cat in s1
7-
@test !(nothing in s1)
8-
9-
s2 = Space(0:1)
10-
@test 0 in s2
11-
@test !(0.5 in s2)
12-
13-
s3 = Space(Bool)
14-
@test false in s3
15-
@test true in s3
16-
17-
s4 = Space(Float64)
18-
@test rand() in s4
19-
@test 0 in s4
5+
@testset "Spaces" begin
6+
s1 = Space((:cat, :dog))
7+
@test :cat in s1
8+
@test !(nothing in s1)
9+
10+
s2 = Space(0:1)
11+
@test 0 in s2
12+
@test !(0.5 in s2)
13+
14+
s3 = Space(Bool)
15+
@test false in s3
16+
@test true in s3
17+
18+
s4 = Space(Float64)
19+
@test rand() in s4
20+
@test 0 in s4
21+
22+
s5 = Space(Float64, 3, 4)
23+
@test rand(3, 4) in s5
24+
25+
s6 = Space(SVector((:cat, :dog), (:litchi, :longan, :mango)))
26+
@test SVector(:dog, :litchi) in s6
27+
28+
s7 = Space([-1 .. 1, 2 .. 3])
29+
@test [0, 2] in s7
30+
@test !([-5, 5] in s7)
31+
32+
for _ in 1:100
33+
for s in [s1, s2, s3, s4, s5, s6, s7]
34+
@test rand(s) in s
35+
end
36+
end
37+
end
2038

21-
s5 = Space(Float64, 3, 4)
22-
@test rand(3, 4) in s5
39+
@testset "Meta Spaces" begin
40+
s1 = (Space(1:2), Space(Float64, 2, 3))
41+
@test (1, rand(2, 3)) in s1
2342

24-
s6 = Space(SVector((:cat, :dog), (:litchi, :longan, :mango)))
25-
@test SVector(:dog, :litchi) in s6
43+
s2 = (a=Space(1:2), b=Space(Float64, 2, 3))
44+
@test (a=1, b=rand(2, 3)) in s2
2645

27-
s7 = Space([-1 .. 1, 2 .. 3])
28-
@test [0, 2] in s7
29-
@test !([-5, 5] in s7)
46+
s3 = Dict(:a => Space(1:2), :b => Space(Float64, 2, 3))
47+
@test Dict(:a => 1, :b => rand(2, 3)) in s3
3048

31-
# for _ in 1:100
32-
for s in [s1, s2, s3, s4, s5, s6, s7]
33-
@info s
34-
@test rand(s) in s
49+
for _ in 1:100
50+
for s in [s1, s2, s3]
51+
rand(s) in s
52+
end
53+
end
3554
end
36-
# end
3755
end

0 commit comments

Comments
 (0)