-
Notifications
You must be signed in to change notification settings - Fork 104
/
Rakefile
78 lines (68 loc) · 2.04 KB
/
Rakefile
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
# 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