File: Rakefile

package info (click to toggle)
ruby-bson 5.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,828 kB
  • sloc: ruby: 11,712; ansic: 1,427; java: 514; makefile: 8
file content (79 lines) | stat: -rw-r--r-- 2,111 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# rubocop:todo all
# Copyright (C) 2009-2013 MongoDB Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'json'

# test framework for C extension versus pure Ruby
# (consider ENV for C versus C)
DEFAULT_TARGET = 'test_ext_rb_float_to_bson'
NON_ZERO_TIME = 0.0000000001 # 10^-10

def sh_eval(command)
  puts command
  text = `#{command}`
  lines = text.split("\n")
  ruby_on = lines.grep(/^[^.#\w]/).first
  if lines.grep(/Error/).first
    print text
    raise "sh_eval error"
  elsif ruby_on
    eval lines.grep(/^[^.#\w]/).first
  else
    raise "no Ruby data - check the TARGET"
  end
end

def hash_f(hash, precision)
   hash.each_pair do |key, value|
     hash[key] = "%.#{precision}f" % value if value.kind_of?(Float)
   end
end

def print_gain(measurement)
  measurement = measurement.collect do |h|
    h[:allocated] = h[:allocated] / h[:count]
    h[:label] = "\"#{h[:label]}\""
    h.select{|k,v| [:label, :utime, :real, :allocated].include?(k)}
  end
  gain = 1.0 - measurement[1][:utime]/(measurement[0][:utime] + NON_ZERO_TIME)
  measurement.each do |t|
    puts hash_f(t, 1).each_pair.collect{|key, value| "#{key}: #{value}" }.join(', ')
  end
  puts "gain: #{'%.2f' % gain}"
end

$measurement = []

task :default do
  TARGET = ENV['TARGET'] || DEFAULT_TARGET
  $measurement = []
  [:clean, :compile].each do |t|
    Rake::Task[t].execute
    Rake::Task[:test].execute
  end
  print_gain($measurement)
end

task :clean do
  sh "(cd .. && rake clean)"
end

task :compile do
  sh "(cd .. && rake compile)"
end

task :test do
  $measurement << sh_eval("ruby bench_test.rb --name #{TARGET}")
end