Sha256: a4ef2099de68a569f3531af792da7c3ef7ae99a7503921bdc973ce61609ed398

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

$LOAD_PATH.unshift '../lib'
require 'time_series_math'
require 'benchmark'

include TimeSeriesMath

def t_rand
  rand * 1000.0
end

def b_search(ts, t)
  return nil if t < ts.t_first
  return ts.last if t >= ts.t_last
  ileft = 0
  iright = ts.size-1
  while iright - ileft > 1
    icenter = ileft + (iright - ileft) /2
    if t >= ts.data[icenter][0]
      ileft = icenter
    else
      iright = icenter
    end
  end
  if iright - ileft != 1
    fail "ileft:#{ileft} iright:#{iright}"
  elsif ts.data[ileft][0] > t || ts.data[iright][0] <= t
    puts "(ts: t_first:#{ts.t_first} t_last:#{ts.t_last}"
    fail "t:#{t}, t_left:#{ts.data[ileft][0]}, t_right:#{ts.data[iright][0]}"
  end
  v = ts.data[ileft]
end

def b_search_native(ts, t)
  v_right = ts.data.bsearch { |d| d[0] > t }
  v_right.nil? ? ts.last : v_right[1]
end

TS_N = [1_000, 100_000, 1_000_000]
TESTS = 1000_000
ts_list = []

TS_N.each do |num_samples|
  puts "** initializing time series with #{num_samples} samples"
  tt = []
  dd = []
  num_samples.times do
    tt << t_rand
    dd << { x: rand * 10.0 }
  end
  ts_list << TimeSeries.new(tt, dd)
end

puts '** running benchmarks'
Benchmark.bmbm do |b|
  ts_list.each do |ts|
    b.report "size: #{ts.size}, running #{TESTS} times #indices_at" do
      TESTS.times { ts.indices_at(t_rand) }
    end
  end
  ts_list.each do |ts|
    b.report "size: #{ts.size}, running #{TESTS} times #bsearch_indices_at" do
      TESTS.times { ts.bsearch_indices_at(t_rand) }
    end
  end
  ts_list.each do |ts|
    b.report "size: #{ts.size}, running #{TESTS} times #b_search" do
      TESTS.times { b_search(ts, t_rand) }
    end
  end
  ts_list.each do |ts|
    b.report "size: #{ts.size}, running #{TESTS} times #b_search_native" do
      TESTS.times { b_search_native(ts, t_rand) }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
time_series_math-0.1.1 examples/ts_benchmark.rb