test: ✨ add conversion method benchmark
This commit is contained in:
parent
1013060529
commit
f7a2bea526
1 changed files with 84 additions and 0 deletions
84
lib/timeseries/hoarder/convbenchmark.rb
Normal file
84
lib/timeseries/hoarder/convbenchmark.rb
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
|
||||||
|
|
||||||
|
require 'benchmark'
|
||||||
|
require 'numo/narray'
|
||||||
|
|
||||||
|
require 'bindata'
|
||||||
|
|
||||||
|
class PGDataFloatArray < BinData::Record
|
||||||
|
array :numbers do
|
||||||
|
uint32be value: 8
|
||||||
|
double_be :pg_data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
n = 1000
|
||||||
|
rand_data = 10000.times.to_a.map { rand() };
|
||||||
|
|
||||||
|
Benchmark.bmbm do |x|
|
||||||
|
x.report("PostgreSQL String:") do
|
||||||
|
n.times do
|
||||||
|
result_array = "{#{rand_data.join(',')}}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
x.report("Binary pack:") do
|
||||||
|
n.times do
|
||||||
|
result_array = rand_data.pack("G*");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
x.report("Numo-NArray to_bytes:") do
|
||||||
|
numo_array = Numo::DFloat[rand_data]
|
||||||
|
n.times do
|
||||||
|
result_array = numo_array.to_network.to_binary
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# x.report("Binary pack with join:") do
|
||||||
|
# n.times do
|
||||||
|
# pg_array = PGDataFloatArray.new()
|
||||||
|
# data = {pg_data: 0}
|
||||||
|
# rand_data.each { |v| data[:pg_data] = v; pg_array.numbers << data }
|
||||||
|
#
|
||||||
|
# result_array = pg_array.to_binary_s
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
|
x.report(".pack() then string insert:") do
|
||||||
|
n.times do
|
||||||
|
insert_key = [8].pack("N");
|
||||||
|
|
||||||
|
result_array = rand_data.pack("G*");
|
||||||
|
rand_data.size.times do |i|
|
||||||
|
result_array.insert(i*12, insert_key)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
x.report(".map(.pack).join()") do
|
||||||
|
n.times do
|
||||||
|
join_sep = [8].pack("N");
|
||||||
|
pack_arr = [0]
|
||||||
|
|
||||||
|
result_array = rand_data.map { |v| pack_arr[0] = v; pack_arr.pack("G") }.join(join_sep)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
x.report("Prefilled string slicing") do
|
||||||
|
n.times do
|
||||||
|
prep_string = [8].pack("Nx8") * rand_data.length
|
||||||
|
pack_str = "G"
|
||||||
|
pack_array = [0]
|
||||||
|
pack_buffer = ' '
|
||||||
|
pack_opts = {
|
||||||
|
buffer: pack_buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
rand_data.each_index do |index|
|
||||||
|
pack_array[0] = rand_data[index]
|
||||||
|
prep_string[12*index + 4, 8] = pack_array.pack(pack_str)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue