forked from somebee/rbench
/
README
103 lines (78 loc) · 3.04 KB
/
README
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
rbench
======
== What is RBench?
Library for generating nice ruby-benchmarks in several formats.
Only text-output is available atm.
Heavily inspired by benchwarmer. Much love.
== Usage
require "rubygems"
require "rbench"
# Choose how many times you want to repeat each benchmark.
# This can be overridden on specific reports, if needed.
TIMES = 100_000
# A relatively simple benchmark:
RBench.run(TIMES) do
column :one
column :two
report "Squeezing with #squeeze" do
one { "abc//def//ghi//jkl".squeeze("/") }
two { "abc///def///ghi///jkl".squeeze("/") }
end
report "Squeezing with #gsub" do
one { "abc//def//ghi//jkl".gsub(/\/+/, "/") }
two { "abc///def///ghi///jkl".gsub(/\/+/, "/") }
end
report "Splitting with #split" do
one { "aaa/aaa/aaa.bbb.ccc.ddd".split(".") }
two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".split(".") }
end
report "Splitting with #match" do
one { "aaa/aaa/aaa.bbb.ccc.ddd".match(/\.([^\.]*)$/) }
two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".match(/\.([^\.]*)$/) }
end
end
# The benchmark above will output the following:
ONE | TWO |
--------------------------------------------------------------------------------
Squeezing with #squeeze 0.122 | 0.118 |
Squeezing with #gsub 0.274 | 0.271 |
Splitting with #split 0.349 | 0.394 |
Splitting with #match 0.238 | 0.291 |
# Now onto a benchmark that utilizes a some more stiff.
RBench.run(TIMES) do
format :width => 65
column :times
column :one, :title => "#1"
column :two, :title => "#2"
column :diff, :title => "#1/#2", :compare => [:one,:two]
group "Squeezing" do
report "with #squeeze" do
one { "abc//def//ghi//jkl".squeeze("/") }
two { "abc///def///ghi///jkl".squeeze("/") }
end
report "with #gsub" do
one { "abc//def//ghi//jkl".gsub(/\/+/, "/") }
two { "abc///def///ghi///jkl".gsub(/\/+/, "/") }
end
summary "all methods (totals)"
end
group "Splitting" do
report "with #split" do
one { "aaa/aaa/aaa.bbb.ccc.ddd".split(".") }
two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".split(".") }
end
report "with #match", TIMES / 100 do
one { "aaa/aaa/aaa.bbb.ccc.ddd".match(/\.([^\.]*)$/) }
two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".match(/\.([^\.]*)$/) }
end
end
end
# The benchmark above will output the following:
| #1 | #2 | #1/#2 |
--Squeezing------------------------------------------------------
with #squeeze x100000 | 0.122 | 0.117 | 1.04x |
with #gsub x100000 | 0.267 | 0.279 | 0.96x |
all methods (totals) | 0.390 | 0.396 | 0.98x |
--Splitting------------------------------------------------------
with #split x100000 | 0.341 | 0.394 | 0.87x |
with #match x1000 | 0.002 | 0.003 | 0.82x |