InMemoryLoggedDB.jl/test/store.jl

81 lines
1.5 KiB
Julia
Raw Normal View History

2020-02-28 09:55:03 +01:00
using MsgPack
struct Timing
label::String
time::Float64
end
MsgPack.msgpack_type(::Type{Timing}) = MsgPack.StructType()
const timings = Buffer(1_000_000, "timings.msgpack", Timing)
struct X
el::Bool
N::Int
c::String
end
MsgPack.msgpack_type(::Type{X}) = MsgPack.StructType()
mkpath("results")
function microtest(t, ns)
label = "$(t)_$(ns)"
buf = Buffer(t, "results/$(label).msgpack", X, ns)
res = @timed begin
for i in 1:10000
push!(buf, X(1,i,string("c is: ", i)))
end
flush(buf)
end
close(buf)
(label, res[2])
end
function test(range)
for ns in range
for t in 1:1000
push!(timings,
Timing(microtest(t, ns)...))
end
end
end
test(1:5)
test(6:15:31)
test(10_000_000:10_000_000)
close(timing)
# Compare with the dumbest Array implementation
const dumbtimings = Buffer(1_000_000, "dumbtimings.msgpack", Timing)
function dumb(t, ns)
label = "dumb_$(t)_$(ns)"
name = "results/$(label).msgpack"
res = open(name, "a+") do out
buf = X[]
@timed begin
for i in 1:10000
push!(buf, X(1,i,string("c is: ", i)))
end
write.(Ref(out), pack.(buf))
empty!(buf)
end
end
(label, res[2])
end
function test_dumb(range)
for ns in range
for t in 1:1000
push!(dumbtimings,
Timing(dumb(t, ns)...))
end
end
end
test_dumb(1:5)
test_dumb(6:15:31)
test_dumb(10_000_000:10_000_000)