bench 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README +109 -0
  2. data/lib/bench.rb +56 -0
  3. metadata +54 -0
data/README ADDED
@@ -0,0 +1,109 @@
1
+ == bench
2
+
3
+ * http://bench.rubyforge.org
4
+ * http://rubyforge.org/projects/bench
5
+
6
+ == DESCRIPTION
7
+
8
+ Do you remeber how to use the benchmark library from the Ruby standard lib? I don't.
9
+
10
+ Now you need not to remember, there is Bench: A DSL around the benchmark lib of the Ruby
11
+ standard lib with the goal to make benchmarking as easy as possible.'
12
+
13
+ == SYNOPSIS
14
+
15
+ First an adapted example of the benchmark documentation from the pickaxe version 2 page 657
16
+
17
+ require 'bench'
18
+
19
+ string = 'Stormy Weather'
20
+ m = string.method(:length)
21
+
22
+ benchmark 'code' do
23
+ m.call
24
+ end
25
+
26
+ benchmark 'send' do
27
+ string.send(:length)
28
+ end
29
+
30
+ benchmark 'eval' do
31
+ eval "string.length"
32
+ end
33
+
34
+ run 10_000
35
+
36
+ You call the run method more than once for identifying rought values.
37
+
38
+ It's also nice to use Bench interactive with irb:
39
+ >> require 'bench'
40
+ => true
41
+ >> benchmark 'simple' do
42
+ ?> /ll/ =~ 'hello world'
43
+ >> end
44
+ => [#<OpenStruct name="simple", proc=#<Proc:0xb7bf7acc@(irb):2>]
45
+ >> benchmark 'freezed' do
46
+ ?> /ll/.freeze =~ 'hello world'
47
+ >> end
48
+ => [#<OpenStruct name="simple", proc=#<Proc:0xb7bf7acc@(irb):2>, #<OpenStruct na
49
+ me="freezed", proc=#<Proc:0xb7bf26d0@(irb):5>]
50
+ >> run 1000
51
+ user system total real
52
+ simple 0.000000 0.000000 0.000000 ( 0.003960)
53
+ freezed 0.010000 0.000000 0.010000 ( 0.004870)
54
+ => true
55
+ >> run 1000
56
+ user system total real
57
+ simple 0.010000 0.000000 0.010000 ( 0.003969)
58
+ freezed 0.000000 0.000000 0.000000 ( 0.004624)
59
+ => true
60
+ >> # let's try more iterations
61
+ ?> run 10000
62
+ user system total real
63
+ simple 0.060000 0.000000 0.060000 ( 0.058049)
64
+ freezed 0.060000 0.000000 0.060000 ( 0.058636)
65
+ => true
66
+ >> run 100000
67
+ user system total real
68
+ simple 0.500000 0.000000 0.500000 ( 0.502427)
69
+ freezed 0.540000 0.000000 0.540000 ( 0.533421)
70
+ => true
71
+ >> # now another benchmark sample
72
+ ?> RE = /ll/
73
+ => ll
74
+ >> benchmark 'constant' do
75
+ ?> RE =~ 'hello world'
76
+ >> end
77
+ => [#<OpenStruct name="simple", proc=#<Proc:0xb7bf7acc@(irb):2>, #<OpenStruct name="freezed", proc=#<Proc:0xb7bf26d0@(irb):5>, #<OpenStruct name="constant", proc=#<Proc:0xb7c26250@(irb):15>]
78
+ >> run
79
+ user system total real
80
+ simple 0.000000 0.000000 0.000000 ( 0.000031)
81
+ freezed 0.000000 0.000000 0.000000 ( 0.000469)
82
+ constant 0.000000 0.000000 0.000000 ( 0.000031)
83
+ => true
84
+ >> run 100000
85
+ user system total real
86
+ simple 0.500000 0.000000 0.500000 ( 0.507686)
87
+ freezed 0.540000 0.000000 0.540000 ( 0.537840)
88
+ constant 0.550000 0.000000 0.550000 ( 0.552103)
89
+ => true
90
+ >> run 100000
91
+ user system total real
92
+ simple 0.510000 0.000000 0.510000 ( 0.506002)
93
+ freezed 0.520000 0.000000 0.520000 ( 0.542898)
94
+ constant 0.520000 0.020000 0.540000 ( 0.552802)
95
+ => true
96
+ >> run 100000
97
+ user system total real
98
+ simple 0.510000 0.000000 0.510000 ( 0.504704)
99
+ freezed 0.530000 0.000000 0.530000 ( 0.536948)
100
+ constant 0.560000 0.000000 0.560000 ( 0.554470)
101
+ => true
102
+
103
+ == CREDITS
104
+
105
+ Copyright 2008 by Jan Friedrich (janfri.rubyforge@gmail.com)
106
+
107
+ == LICENSE
108
+
109
+ Ruby's license.
@@ -0,0 +1,56 @@
1
+ require 'benchmark'
2
+ require 'ostruct'
3
+
4
+ module Bench
5
+
6
+ # Create a new benchmark sample <tt>name</tt>.
7
+ # Within the block you specify the code to execute.
8
+ def benchmark name, &block
9
+ bm = OpenStruct.new
10
+ bm.name = name
11
+ bm.proc = block
12
+ Bench.queue << bm
13
+ end
14
+
15
+ # Runs the benchmarks. Parameter <tt>count</tt> is the number of iterations
16
+ # each sample code should be repeated.
17
+ def run count=1
18
+ size = Bench.queue.inject(0) {|max, bm| size = bm.name.size; size > max ? size : max}
19
+ Benchmark.bm(size) do |x|
20
+ Bench.queue.each do |bm|
21
+ x.report(bm.name) { count.times {bm.proc.call} }
22
+ end
23
+ end
24
+ end
25
+
26
+ module_function :benchmark, :run
27
+
28
+ @queue = []
29
+
30
+ class << self
31
+ attr_reader :queue
32
+ end
33
+
34
+ end
35
+
36
+ include Bench
37
+
38
+ if __FILE__ == $0
39
+ # You can define benchmarks with the benchmark method
40
+ # first parameter is the name of the benchmark
41
+ # in the block you write the code to benchmark
42
+ benchmark 'fac' do
43
+ (1..100).inject(1) {|p,i| p*i}
44
+ end
45
+ time = 0.00001
46
+ benchmark 'sleep' do
47
+ sleep time
48
+ end
49
+ # You can run more than once to identify rogue results
50
+ run 100
51
+ run 100
52
+ # You can also change the environment
53
+ # Be aware! ;)
54
+ time *= 1000
55
+ run 100
56
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bench
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jan Friedrich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-06-10 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: janfri.rubyforge@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - lib/bench.rb
26
+ - README
27
+ has_rdoc: true
28
+ homepage: http://bench.rubyforge.org
29
+ post_install_message:
30
+ rdoc_options:
31
+ - -m README
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: "0"
39
+ version:
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ requirements: []
47
+
48
+ rubyforge_project: http://rubyforge.org/projects/bench
49
+ rubygems_version: 1.1.0
50
+ signing_key:
51
+ specification_version: 2
52
+ summary: A wrapper DSL around the benchmark lib of the Ruby standard lib with the goal to make benchmarking as easy as possible.
53
+ test_files: []
54
+