Skip to content

Commit 2a922d6

Browse files
committed
better isapprox support
1 parent 31431e3 commit 2a922d6

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/MAT_types.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ function Base.:(==)(m1::MatlabStructArray{N}, m2::MatlabStructArray{N}) where {N
173173
end
174174

175175
function Base.isapprox(m1::MatlabStructArray, m2::MatlabStructArray; kwargs...)
176-
return isequal(m1.names, m2.names) && isapprox(m1.values, m2.values; kwargs...)
176+
return isequal(m1.class, m2.class) && isequal(m1.names, m2.names) && isapprox(m1.values, m2.values; kwargs...)
177177
end
178178

179179
function find_index(m::MatlabStructArray, s::AbstractString)
@@ -312,6 +312,14 @@ Base.iterate(m::MatlabClassObject) = iterate(m.d)
312312
Base.haskey(m::MatlabClassObject, k) = haskey(m.d, k)
313313
Base.get(m::MatlabClassObject, k, default) = get(m.d, k, default)
314314

315+
function Base.:(==)(m1::MatlabClassObject, m2::MatlabClassObject)
316+
return m1.class == m2.class && m1.d == m2.d
317+
end
318+
319+
function Base.isapprox(m1::MatlabClassObject, m2::MatlabClassObject; kwargs...)
320+
return m1.class == m2.class && dict_isapprox(m1.d, m2.d; kwargs...)
321+
end
322+
315323
function MatlabStructArray(arr::AbstractArray{MatlabClassObject})
316324
first_obj, remaining_obj = Iterators.peel(arr)
317325
class = first_obj.class

test/types.jl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ using Dates
5959
d_symbol = Array{Dict{Symbol,Any}}(MatlabStructArray(d_arr))
6060
@test d_symbol[2][:x] == d_arr[2]["x"]
6161
@test Array(MatlabStructArray(d_symbol)) == d_arr
62+
@test s_arr == MatlabStructArray(d_arr)
6263

6364
# class object array conversion
64-
s_arr = MatlabStructArray(d_arr, "TestClass")
65-
c_arr = Array(s_arr)
65+
s_arr_class = MatlabStructArray(d_arr, "TestClass")
66+
c_arr = Array(s_arr_class)
6667
@test c_arr isa Array{MatlabClassObject}
6768
@test all(c->c.class=="TestClass", c_arr)
68-
@test MatlabStructArray(c_arr) == s_arr
69+
@test MatlabStructArray(c_arr) == s_arr_class
70+
@test s_arr_class != s_arr
6971

7072
# test error of unequal structs
7173
wrong_sarr = Dict{String, Any}[
@@ -86,15 +88,23 @@ end
8688
@test haskey(obj, "a")
8789
@test get(obj, "b", "default") == "default"
8890

89-
obj["b"] = 7
90-
@test obj["b"] == 7
91+
obj["b"] = "str"
92+
@test obj["b"] == "str"
9193

9294
c_arr = [MatlabClassObject(d, "TestClassOld"), MatlabClassObject(d, "TestClassOld")]
9395
s_arr = MatlabStructArray(c_arr)
9496
@test s_arr.class == "TestClassOld"
9597

9698
wrong_arr = [MatlabClassObject(d, "TestClassOld"), MatlabClassObject(d, "Bah")]
9799
@test_throws ErrorException MatlabStructArray(wrong_arr)
100+
101+
d2 = deepcopy(obj.d)
102+
@test obj == MatlabClassObject(d2, "TestClassOld")
103+
@test obj != MatlabClassObject(obj.d, "Banana")
104+
d2["a"] = 5.0 + 1e-9
105+
@test obj != MatlabClassObject(d2, "TestClassOld")
106+
@test obj MatlabClassObject(d2, "TestClassOld")
107+
@test !(obj MatlabClassObject(d2, "Banana"))
98108
end
99109

100110
@testset "MatlabOpaque string" begin

0 commit comments

Comments
 (0)