runmetric 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/runmetric.rb +124 -0
  2. metadata +49 -0
data/lib/runmetric.rb ADDED
@@ -0,0 +1,124 @@
1
+ =begin rdoc
2
+
3
+ == +runmetric.rb+: a simple solution to hide the complexity of the +Benchmark+ module
4
+
5
+ Copyright (c) 2012 AJ AYIDJKIMO <aj.presenttense@gmail.com>
6
+
7
+ All rights reserved. You can redistribute and/or modify it under the same terms as Ruby.
8
+
9
+ == Overview
10
+
11
+ This library provides the +Runmetric+ module, with its convenience method +run_metric+ that encapsulates (hides) some of the complexity of the +Benchmark+ module in the standard library. It was designed for use in online programming challenges, but it has application anytime performance (speed) information might be helpful or necessary in evaluating algorithm or application usage.
12
+
13
+ == Usage
14
+
15
+ This example, from code written by the developer, illustrates how runmetric might be used:
16
+
17
+ def problem(max)
18
+
19
+ require 'runmetric'
20
+ include Runmetric
21
+
22
+ run_metric(iterations: 10**5) do
23
+ (max/2..max).inject(:lcm)
24
+ end
25
+
26
+ end
27
+
28
+ problem(20)
29
+
30
+ This output was automatically generated from the example code without use of +puts+ or +inspect+ methods:
31
+
32
+ Performance:
33
+
34
+ user system total real
35
+ 0.312000 0.000000 0.312000 ( 0.321018)
36
+
37
+ Result(s):
38
+
39
+ 232792560
40
+
41
+ Read the code in this module to understand how it operates and to see what other arguments the +run_metric+ method can take.
42
+
43
+ =end
44
+
45
+ module Runmetric
46
+
47
+ require 'benchmark'
48
+ include Benchmark
49
+
50
+ def run_metric(opts={}, *any, &code)
51
+
52
+ iterations = opts[:iterations] || 1
53
+ reports = opts[:reports] || 1
54
+ if iterations == 1 then
55
+ run_when = opts[:run_when] || :run_last_once
56
+ else
57
+ run_when = opts[:run_when] || :run_last
58
+ end
59
+
60
+ case run_when
61
+ when :run_first
62
+
63
+ # call code once to obtain results then within loop for timing
64
+ run_code(*any, &code)
65
+ time_code(reports, iterations, *any, &code)
66
+
67
+ when :run_last
68
+
69
+ # call code within loop for timing then once to obtain results
70
+ time_code(reports, iterations, *any, &code)
71
+ run_code(*any, &code)
72
+
73
+ when :run_last_once
74
+
75
+ # call code once to obtain results and timing
76
+ time_and_run_code(*any, &code)
77
+
78
+ else
79
+ raise ArgumentError
80
+ end
81
+
82
+ end
83
+
84
+ private
85
+
86
+ def run_code(*any, &code) #:doc:
87
+
88
+ puts "\nResult(s):\n\n"
89
+ puts code.call(*any)
90
+
91
+ end
92
+
93
+ def time_and_run_code(*any, &code) #:doc:
94
+
95
+ results = 0
96
+
97
+ puts "\nPerformance:\n\n"
98
+ bm do |x|
99
+ x.report do
100
+ results = code.call(*any)
101
+ end
102
+ end
103
+
104
+ puts "\nResult(s):\n\n"
105
+ puts results
106
+
107
+ end
108
+
109
+ def time_code(reports, iterations, *any, &code) #:doc:
110
+
111
+ puts "\nPerformance:\n\n"
112
+ reports.times do
113
+ bm do |x|
114
+ x.report do
115
+ iterations.times do
116
+ code.call(*any)
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: runmetric
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - AJ Ayidjkimo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-06 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: This library provides the Runmetric module, with its convenience method
15
+ run_metric that encapsulates (hides) some of the complexity of the Benchmark module
16
+ in the standard library. It was designed for use in online programming challenges,
17
+ but it has application anytime performance (speed) information might be helpful
18
+ or necessary in evaluating algorithm or application usage.
19
+ email: aj.presenttense@gmail.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - lib/runmetric.rb
25
+ homepage: http://www.technopolissoftware.com
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '1.9'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.24
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: Simple solution to hide the complexity of the Benchmark module
49
+ test_files: []