Skip to content

Commit 1bce8dd

Browse files
authored
Merge pull request #256 from PerformanceCoder/fixed_serialization
Fixed serialization issue
2 parents f1c9186 + 71252c5 commit 1bce8dd

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/types.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -286,20 +286,23 @@ coeff(b::Basic, x::Basic) = coeff(b, x, one(Basic))
286286

287287
function Serialization.serialize(s::Serialization.AbstractSerializer, m::Basic)
288288
Serialization.serialize_type(s, typeof(m))
289-
289+
290290
size = Ref{UInt64}(0)
291-
serialized = ccall((:basic_dumps, libsymengine),
291+
serialized = ccall((:basic_dumps, libsymengine),
292292
Ptr{Int8}, (Ref{Basic}, Ptr{UInt64}), m, size)
293-
julia_serialized_str = unsafe_string(serialized, size[])
294-
write(s.io, julia_serialized_str)
293+
294+
write(s.io, size[])
295+
unsafe_write(s.io, serialized, size[])
295296
end
296297

297298
function Serialization.deserialize(s::Serialization.AbstractSerializer, ::Type{Basic})
298-
ser_str = read(s.io, String)
299-
299+
size = read(s.io, UInt64)
300+
serialized_data = read(s.io, size)
301+
300302
a = Basic()
301-
res = ccall((:basic_loads, libsymengine),
302-
Cuint, (Ref{Basic}, Ptr{Int8}, UInt64), a, ser_str, length(ser_str))
303+
res = ccall((:basic_loads, libsymengine),
304+
Cuint, (Ref{Basic}, Ptr{Int8}, UInt64), a, serialized_data, size)
303305
throw_if_error(res)
304306
return a
305307
end
308+

test/runtests.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,4 +290,13 @@ end
290290
@test is_serialization_correct(Basic(pi))
291291
@test is_serialization_correct(Basic(x + y))
292292
@test is_serialization_correct(Basic(sin(cos(pi*x + y)) + y^2))
293-
end
293+
294+
# Complex type test
295+
iobuf = IOBuffer()
296+
data = [x+y, x+y]
297+
serialize(iobuf, data)
298+
seek(iobuf, 0)
299+
deserialized = deserialize(iobuf)
300+
close(iobuf)
301+
@test deserialized == data
302+
end

0 commit comments

Comments
 (0)