benelux 0.5.17 → 0.6.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.
- data/CHANGES.txt +3 -2
- data/benelux.gemspec +2 -12
- data/lib/benelux.rb +11 -17
- data/lib/benelux/mixins.rb +3 -3
- data/lib/benelux/packer.rb +7 -4
- data/lib/benelux/stats.rb +2 -2
- data/lib/benelux/track.rb +18 -3
- data/lib/selectable.rb +4 -0
- data/lib/selectable/tags.rb +1 -1
- metadata +21 -15
- data/tryouts/10_stats_tryouts.rb +0 -66
- data/tryouts/11_selectable_tryouts.rb +0 -92
- data/tryouts/20_tracks_tryouts.rb +0 -22
- data/tryouts/30_reporter_tryouts.rb +0 -34
- data/tryouts/30_timeline_tryouts.rb +0 -60
- data/tryouts/benelux_bm.rb +0 -9
- data/tryouts/proofs/alias_performance.rb +0 -33
- data/tryouts/proofs/array_performance.rb +0 -57
- data/tryouts/proofs/thread_array.rb +0 -49
- data/tryouts/proofs/timer_threading.rb +0 -30
data/CHANGES.txt
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
BENELUX, CHANGES
|
2
2
|
|
3
|
-
#### 0.5.17 (2011-02-26) ##############################
|
4
3
|
|
5
|
-
|
4
|
+
#### 0.6.0 (2010-09-05) ##############################
|
5
|
+
|
6
|
+
* CHANGE: Thread now belongs to Track (previously reversed)
|
6
7
|
|
7
8
|
#### 0.5.16 (2010-06-08) ##############################
|
8
9
|
|
data/benelux.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "benelux"
|
3
3
|
s.rubyforge_project = 'benelux'
|
4
|
-
s.version = "0.
|
4
|
+
s.version = "0.6.0"
|
5
5
|
s.summary = "Benelux: A mad way to time Ruby codes"
|
6
6
|
s.description = s.summary
|
7
7
|
s.author = "Delano Mandelbaum"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
s.rdoc_options = ["--line-numbers", "--title", s.summary, "--main", "README.rdoc"]
|
14
14
|
s.require_paths = %w[lib]
|
15
15
|
|
16
|
-
s.add_dependency("storable", [">= 0.
|
16
|
+
s.add_dependency("storable", [">= 0.8.0"])
|
17
17
|
|
18
18
|
# = MANIFEST =
|
19
19
|
# git ls-files
|
@@ -35,16 +35,6 @@
|
|
35
35
|
lib/selectable/global.rb
|
36
36
|
lib/selectable/object.rb
|
37
37
|
lib/selectable/tags.rb
|
38
|
-
tryouts/10_stats_tryouts.rb
|
39
|
-
tryouts/11_selectable_tryouts.rb
|
40
|
-
tryouts/20_tracks_tryouts.rb
|
41
|
-
tryouts/30_reporter_tryouts.rb
|
42
|
-
tryouts/30_timeline_tryouts.rb
|
43
|
-
tryouts/benelux_bm.rb
|
44
|
-
tryouts/proofs/alias_performance.rb
|
45
|
-
tryouts/proofs/array_performance.rb
|
46
|
-
tryouts/proofs/thread_array.rb
|
47
|
-
tryouts/proofs/timer_threading.rb
|
48
38
|
)
|
49
39
|
|
50
40
|
|
data/lib/benelux.rb
CHANGED
@@ -5,7 +5,7 @@ require 'selectable'
|
|
5
5
|
require 'storable'
|
6
6
|
|
7
7
|
module Benelux
|
8
|
-
VERSION = "0.
|
8
|
+
VERSION = "0.6.0"
|
9
9
|
NOTSUPPORTED = [Class, Object, Kernel]
|
10
10
|
|
11
11
|
class BeneluxError < RuntimeError; end
|
@@ -66,15 +66,13 @@ module Benelux
|
|
66
66
|
# If +track+ is nil, it returns the Track object for the
|
67
67
|
# Track associated to the current thread.
|
68
68
|
#
|
69
|
-
def Benelux.current_track(name=nil,
|
69
|
+
def Benelux.current_track(name=nil,timeline=nil)
|
70
70
|
if name.nil?
|
71
71
|
name = Thread.current.track_name
|
72
72
|
else
|
73
73
|
Thread.current.track_name = name
|
74
74
|
@@mutex.synchronize do
|
75
|
-
Thread.current.timeline
|
76
|
-
Thread.current.rotated_timelines ||= []
|
77
|
-
@tracks[name] ||= Track.new(name, group)
|
75
|
+
@tracks[name] ||= Track.new(name, timeline || Thread.current.timeline || Benelux::Timeline.new)
|
78
76
|
@tracks[name].add_thread Thread.current
|
79
77
|
@known_threads << Thread.current
|
80
78
|
end
|
@@ -83,6 +81,14 @@ module Benelux
|
|
83
81
|
end
|
84
82
|
Benelux.current_track :main
|
85
83
|
|
84
|
+
def Benelux.merge_tracks
|
85
|
+
tl = Benelux::Timeline.new
|
86
|
+
tracks.each_pair do |trackid,track|
|
87
|
+
tl.merge! track.timeline
|
88
|
+
end
|
89
|
+
tl
|
90
|
+
end
|
91
|
+
|
86
92
|
# Only updates data from threads that
|
87
93
|
# are dead and rotated timelines.
|
88
94
|
def Benelux.update_global_timeline
|
@@ -115,18 +121,6 @@ module Benelux
|
|
115
121
|
end
|
116
122
|
end
|
117
123
|
|
118
|
-
# Thread tags become the default for any new Mark or Range.
|
119
|
-
def Benelux.add_thread_tags(args=Selectable::Tags.new)
|
120
|
-
Benelux.thread_timeline.add_default_tags args
|
121
|
-
end
|
122
|
-
def Benelux.add_thread_tag(*args) add_thread_tags *args end
|
123
|
-
|
124
|
-
def Benelux.remove_thread_tags(*args)
|
125
|
-
Benelux.thread_timeline.remove_default_tags *args
|
126
|
-
end
|
127
|
-
def Benelux.remove_thread_tag(*args) remove_thread_tags *args end
|
128
|
-
|
129
|
-
|
130
124
|
def Benelux.inspect
|
131
125
|
str = ["Benelux"]
|
132
126
|
str << "tracks:" << Benelux.tracks.inspect
|
data/lib/benelux/mixins.rb
CHANGED
@@ -23,9 +23,9 @@ end
|
|
23
23
|
|
24
24
|
class Thread
|
25
25
|
extend Attic
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
attic :timeline
|
27
|
+
attic :track_name
|
28
|
+
attic :rotated_timelines
|
29
29
|
def rotate_timeline
|
30
30
|
self.rotated_timelines << self.timeline
|
31
31
|
tags = self.timeline.default_tags.clone
|
data/lib/benelux/packer.rb
CHANGED
@@ -116,18 +116,21 @@ module Benelux
|
|
116
116
|
def generate_packed_method
|
117
117
|
%Q{
|
118
118
|
def #{@meth}(*args, &block)
|
119
|
+
#p ["#{@meth} 1"]
|
119
120
|
call_id = "" << self.object_id.abs.to_s << args.object_id.abs.to_s
|
120
121
|
Benelux.current_track :global unless Benelux.known_thread?
|
121
|
-
mark_a = Benelux.
|
122
|
+
mark_a = Benelux.current_track.timeline.add_mark :'#{@aliaz}_a'
|
122
123
|
mark_a.add_tag :call_id => call_id
|
123
124
|
tags = mark_a.tags
|
124
125
|
ret = #{@methorig}(*args, &block)
|
126
|
+
#p ["#{@meth} 2"]
|
127
|
+
ret
|
125
128
|
rescue => ex # We do this so we can use
|
126
129
|
raise ex # ex in the ensure block.
|
127
130
|
ensure
|
128
|
-
mark_z = Benelux.
|
131
|
+
mark_z = Benelux.current_track.timeline.add_mark :'#{@aliaz}_z'
|
129
132
|
mark_z.tags = tags # In case tags were added between these marks
|
130
|
-
range = Benelux.
|
133
|
+
range = Benelux.current_track.timeline.add_range :'#{@aliaz}', mark_a, mark_z
|
131
134
|
range.exception = ex if defined?(ex) && !ex.nil?
|
132
135
|
end
|
133
136
|
}
|
@@ -149,7 +152,7 @@ module Benelux
|
|
149
152
|
ret = #{@methorig}(*args, &block)
|
150
153
|
count = cmd.determine_count(args, ret)
|
151
154
|
#Benelux.ld "COUNT(:#{@meth}): \#{count}"
|
152
|
-
Benelux.
|
155
|
+
Benelux.current_track.timeline.add_count :'#{@meth}', count
|
153
156
|
ret
|
154
157
|
end
|
155
158
|
}
|
data/lib/benelux/stats.rb
CHANGED
@@ -151,11 +151,11 @@ module Benelux
|
|
151
151
|
@min, @max = 0.0, 0.0
|
152
152
|
end
|
153
153
|
|
154
|
-
def samples(*args)
|
154
|
+
def samples(*args)
|
155
155
|
args.flatten.each { |s| sample(s) }
|
156
156
|
end
|
157
157
|
|
158
|
-
def merge!(other)
|
158
|
+
def merge!(other)
|
159
159
|
return self if other.n == 0
|
160
160
|
if @n == 0
|
161
161
|
@min, @max = other.min, other.max
|
data/lib/benelux/track.rb
CHANGED
@@ -5,9 +5,11 @@ module Benelux
|
|
5
5
|
attr_reader :name
|
6
6
|
attr_reader :thread_group
|
7
7
|
attr_reader :timeline
|
8
|
-
|
9
|
-
|
10
|
-
@
|
8
|
+
attr_reader :rotated_timelines
|
9
|
+
def initialize(n,t)
|
10
|
+
@name, @thgrp = n, ThreadGroup.new
|
11
|
+
@timeline = t || Benelux::Timeline.new
|
12
|
+
@rotated_timelines = []
|
11
13
|
end
|
12
14
|
def add_thread(t=Thread.current)
|
13
15
|
@thgrp.add t
|
@@ -16,5 +18,18 @@ module Benelux
|
|
16
18
|
def threads
|
17
19
|
@thgrp.list
|
18
20
|
end
|
21
|
+
def add_tags(args=Selectable::Tags.new)
|
22
|
+
timeline.add_default_tags args
|
23
|
+
end
|
24
|
+
def remove_tags(*args)
|
25
|
+
timeline.remove_default_tags *args
|
26
|
+
end
|
27
|
+
##def rotate_timeline
|
28
|
+
## self.rotated_timelines << self.timeline
|
29
|
+
## tags = self.timeline.default_tags.clone
|
30
|
+
## self.timeline = Benelux::Timeline.new
|
31
|
+
## self.timeline.default_tags = tags
|
32
|
+
## self.timeline
|
33
|
+
##end
|
19
34
|
end
|
20
35
|
end
|
data/lib/selectable.rb
CHANGED
data/lib/selectable/tags.rb
CHANGED
@@ -78,7 +78,7 @@ module Selectable
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def method_missing(meth, *args)
|
81
|
-
raise SelectableError, "#{meth}: #{args.first} is not a Hash or Array"
|
81
|
+
raise SelectableError, "#{meth}: #{args.first} is not a Hash or Array #{self}"
|
82
82
|
end
|
83
83
|
|
84
84
|
## NOTE: This is helpful but defensive. Ponder!
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: benelux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
hash: 7
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 0
|
10
|
+
version: 0.6.0
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Delano Mandelbaum
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date:
|
18
|
+
date: 2010-09-05 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +26,12 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ">="
|
23
28
|
- !ruby/object:Gem::Version
|
24
|
-
|
29
|
+
hash: 63
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 8
|
33
|
+
- 0
|
34
|
+
version: 0.8.0
|
25
35
|
type: :runtime
|
26
36
|
version_requirements: *id001
|
27
37
|
description: "Benelux: A mad way to time Ruby codes"
|
@@ -52,16 +62,6 @@ files:
|
|
52
62
|
- lib/selectable/global.rb
|
53
63
|
- lib/selectable/object.rb
|
54
64
|
- lib/selectable/tags.rb
|
55
|
-
- tryouts/10_stats_tryouts.rb
|
56
|
-
- tryouts/11_selectable_tryouts.rb
|
57
|
-
- tryouts/20_tracks_tryouts.rb
|
58
|
-
- tryouts/30_reporter_tryouts.rb
|
59
|
-
- tryouts/30_timeline_tryouts.rb
|
60
|
-
- tryouts/benelux_bm.rb
|
61
|
-
- tryouts/proofs/alias_performance.rb
|
62
|
-
- tryouts/proofs/array_performance.rb
|
63
|
-
- tryouts/proofs/thread_array.rb
|
64
|
-
- tryouts/proofs/timer_threading.rb
|
65
65
|
has_rdoc: true
|
66
66
|
homepage: http://github.com/delano/benelux
|
67
67
|
licenses: []
|
@@ -80,17 +80,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
83
86
|
version: "0"
|
84
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
88
|
none: false
|
86
89
|
requirements:
|
87
90
|
- - ">="
|
88
91
|
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
89
95
|
version: "0"
|
90
96
|
requirements: []
|
91
97
|
|
92
98
|
rubyforge_project: benelux
|
93
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.3.7
|
94
100
|
signing_key:
|
95
101
|
specification_version: 3
|
96
102
|
summary: "Benelux: A mad way to time Ruby codes"
|
data/tryouts/10_stats_tryouts.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
|
2
|
-
group "Benelux"
|
3
|
-
|
4
|
-
library :benelux, 'lib'
|
5
|
-
tryouts "Calculator" do
|
6
|
-
set :base, Benelux::Stats::Calculator.new
|
7
|
-
dream :class, Benelux::Stats::Calculator
|
8
|
-
dream :n, 10
|
9
|
-
dream :sum, 45
|
10
|
-
dream :sumsq, 285
|
11
|
-
dream :min, 0
|
12
|
-
dream :max, 9
|
13
|
-
dream :proc, lambda { |calc| calc.sd.to_i == 3 }
|
14
|
-
drill "can keep stats" do
|
15
|
-
10.times { |i| base.sample(i) }
|
16
|
-
base
|
17
|
-
end
|
18
|
-
|
19
|
-
dream true
|
20
|
-
drill "can add stats" do
|
21
|
-
by_sample = Benelux::Stats::Calculator.new
|
22
|
-
10.times { |i| by_sample.sample(i) }
|
23
|
-
by_sample += base
|
24
|
-
by_merge = Benelux::Stats::Calculator.new
|
25
|
-
by_merge.merge! base
|
26
|
-
by_merge.merge! base
|
27
|
-
stash :sample, by_sample
|
28
|
-
stash :merge, by_merge
|
29
|
-
by_sample == by_merge
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
tryouts "Stats" do
|
35
|
-
set :stat_names, [:execute, :request, :first_byte]
|
36
|
-
|
37
|
-
dream stat_names
|
38
|
-
drill "knows stats names" do
|
39
|
-
stats = Benelux::Stats.new(stat_names)
|
40
|
-
stats.names
|
41
|
-
end
|
42
|
-
|
43
|
-
drill "can keep multiple stats", true do
|
44
|
-
stats = Benelux::Stats.new(stat_names)
|
45
|
-
stats.execute.sample(rand)
|
46
|
-
stats.request.sample(rand*-1)
|
47
|
-
stats.execute != stats.request
|
48
|
-
end
|
49
|
-
|
50
|
-
dream [true, true, true]
|
51
|
-
drill "can keep stats with tags" do
|
52
|
-
stats = Benelux::Stats.new(stat_names)
|
53
|
-
3.times { |i|
|
54
|
-
stats.execute.sample(rand, :usecase => '11')
|
55
|
-
stats.execute.sample(rand, :usecase => '11', :request => '22')
|
56
|
-
stats.execute.sample(rand, :request => '22')
|
57
|
-
}
|
58
|
-
stash :execute_stats, stats.execute
|
59
|
-
[
|
60
|
-
stats.execute['11'] == stats.execute[:usecase => '11'],
|
61
|
-
stats.execute['22'] == stats.execute[:request => '22'],
|
62
|
-
stats.execute['22','11'] == stats.execute[:usecase => '11', :request => '22']
|
63
|
-
]
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
|
2
|
-
group "Benelux"
|
3
|
-
|
4
|
-
library :benelux, 'lib'
|
5
|
-
tryouts "Selectable" do
|
6
|
-
set :base, SelectableArray.new
|
7
|
-
|
8
|
-
setup do
|
9
|
-
class ::TaggedItems
|
10
|
-
include Selectable::Object
|
11
|
-
end
|
12
|
-
10.times { |i|
|
13
|
-
obj = TaggedItems.new
|
14
|
-
obj.add_tags :index => i, :even => (i%2 == 0)
|
15
|
-
base << obj
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
dream :class, SelectableArray
|
20
|
-
dream :size, 5
|
21
|
-
drill "filter returns a new instance of the same object" do
|
22
|
-
base.filter(:even => true)
|
23
|
-
end
|
24
|
-
|
25
|
-
dream :class, SelectableArray
|
26
|
-
dream :object_id, base.object_id
|
27
|
-
dream :size, 5
|
28
|
-
drill "filter! makes permanent changes to itself" do
|
29
|
-
base.filter! :even => true
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
tryouts "Tags" do
|
36
|
-
set :base, Selectable::Tags[:a => 1, :b => 2]
|
37
|
-
|
38
|
-
drill "Can equal a Hash with the same keys/values", true do
|
39
|
-
base == {:a => 1, :b => 2}
|
40
|
-
end
|
41
|
-
|
42
|
-
drill "Implements a comparison operator", true do
|
43
|
-
base.respond_to? :'<=>'
|
44
|
-
end
|
45
|
-
|
46
|
-
drill "Comparison operator returns 0 for same values", 0 do
|
47
|
-
base <=> {:a => 1, :b => 2}
|
48
|
-
end
|
49
|
-
|
50
|
-
drill "Comparison operator returns 1 when it's a superset of other", 1 do
|
51
|
-
base <=> {:a => 1}
|
52
|
-
end
|
53
|
-
|
54
|
-
drill "Comparison operator returns -1 when it's a subset of other", -1 do
|
55
|
-
base <=> {:a => 1, :b => 2, :c => 3}
|
56
|
-
end
|
57
|
-
|
58
|
-
drill "> returns false when compared to a hash with more key value pairs", false do
|
59
|
-
base > {:a => 1, :b => 2, :c => 3}
|
60
|
-
end
|
61
|
-
|
62
|
-
drill "> returns true when compared to a hash with fewer key value pairs", true do
|
63
|
-
base > {:b => 2}
|
64
|
-
end
|
65
|
-
|
66
|
-
drill "< returns true when compared to a hash with more key value pairs", true do
|
67
|
-
base < {:a => 1, :b => 2, :c => 3}
|
68
|
-
end
|
69
|
-
|
70
|
-
drill "< returns false when compared to a hash with fewer key value pairs", false do
|
71
|
-
base < {:b => 2}
|
72
|
-
end
|
73
|
-
|
74
|
-
drill "< returns false when compared to a hash with same values", false do
|
75
|
-
base < {:a => 1, :b => 2}
|
76
|
-
end
|
77
|
-
|
78
|
-
drill "<= returns true when compared to a hash with same values", true do
|
79
|
-
base <= {:b => 2, :a => 1}
|
80
|
-
end
|
81
|
-
|
82
|
-
drill "< returns false when compared to an array with same values", false do
|
83
|
-
base < [1, 2]
|
84
|
-
end
|
85
|
-
|
86
|
-
drill "<= returns true when compared to an array with same values", true do
|
87
|
-
base <= [2, 1]
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
group "Benelux"
|
2
|
-
|
3
|
-
library :benelux, 'lib'
|
4
|
-
tryouts "Tracks" do
|
5
|
-
|
6
|
-
dream [:track1, :track1]
|
7
|
-
drill "Can specify current track" do
|
8
|
-
Benelux.current_track :track1
|
9
|
-
[Thread.current.track_name, Benelux.current_track.name]
|
10
|
-
end
|
11
|
-
|
12
|
-
dream :class, Benelux::Timeline
|
13
|
-
drill "Track has a timeline" do
|
14
|
-
Benelux.current_track.timeline
|
15
|
-
end
|
16
|
-
|
17
|
-
dream :exception, Benelux::UnknownTrack
|
18
|
-
drill "raises exception when unknown track specified" do
|
19
|
-
Benelux.track :name
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
group "Benelux"
|
2
|
-
|
3
|
-
library :benelux, 'lib'
|
4
|
-
xtryouts "Reporter" do
|
5
|
-
set :reporter, Benelux::Reporter.new
|
6
|
-
|
7
|
-
drill "1", true do
|
8
|
-
p Benelux
|
9
|
-
end
|
10
|
-
|
11
|
-
dream :exception, Benelux::BadRecursion
|
12
|
-
xdrill "will not report on itself" do
|
13
|
-
reporter.add_threads Thread.current
|
14
|
-
end
|
15
|
-
|
16
|
-
dream :class, ThreadsWait
|
17
|
-
dream :empty?, false
|
18
|
-
xdrill "can add threads" do
|
19
|
-
2.times {
|
20
|
-
t = Thread.new do
|
21
|
-
3.times { sleep 1; }
|
22
|
-
end
|
23
|
-
reporter.add_thread t
|
24
|
-
}
|
25
|
-
reporter.thwait
|
26
|
-
end
|
27
|
-
|
28
|
-
dream true
|
29
|
-
xdrill "will wait for known threads" do
|
30
|
-
reporter.start
|
31
|
-
reporter
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__END__
|
4
|
-
# OLD (0.3):
|
5
|
-
|
6
|
-
group "Benelux"
|
7
|
-
|
8
|
-
library :benelux, 'lib'
|
9
|
-
tryouts "Timelines" do
|
10
|
-
set :tl, Benelux::Timeline.new
|
11
|
-
|
12
|
-
setup do
|
13
|
-
class ::Sleeper
|
14
|
-
def do_something() sleep rand/3 end
|
15
|
-
def another_method(t) t*2 end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
drill "Can set thread track", :track1 do
|
20
|
-
Benelux.current_track :track1
|
21
|
-
# Thread.current.track
|
22
|
-
end
|
23
|
-
|
24
|
-
drill "Add timers to existing objects", true do
|
25
|
-
Benelux.add_timer Sleeper, :do_something
|
26
|
-
Sleeper.new.respond_to? :timeline
|
27
|
-
end
|
28
|
-
|
29
|
-
dream :class, Benelux::Timeline
|
30
|
-
dream :size, 3
|
31
|
-
drill "create timeline with marks" do
|
32
|
-
tl.add_default_tags :a => :frog
|
33
|
-
tl.add_mark(:one)
|
34
|
-
tl.add_default_tags :b => :rest
|
35
|
-
tl.add_mark(:two)
|
36
|
-
tl.add_default_tags :c => :tilt
|
37
|
-
tl.add_mark(:three)
|
38
|
-
tl.marks
|
39
|
-
end
|
40
|
-
|
41
|
-
dream :size, 2
|
42
|
-
drill "select marks based on tags" do
|
43
|
-
tl[:frog][:b => :rest]
|
44
|
-
end
|
45
|
-
|
46
|
-
dream :class, Benelux::Timeline
|
47
|
-
dream :size, 10 # 5 * 2 = 10
|
48
|
-
drill "Creates a timeline for the thread" do
|
49
|
-
sleeper = Sleeper.new
|
50
|
-
5.times { sleeper.do_something }
|
51
|
-
Benelux.thread_timeline
|
52
|
-
end
|
53
|
-
|
54
|
-
dream :class, Benelux::Timeline
|
55
|
-
dream :size, 10
|
56
|
-
drill "Creates a global timeline" do
|
57
|
-
Benelux.update_all_track_timelines
|
58
|
-
Benelux.timeline
|
59
|
-
end
|
60
|
-
end
|
data/tryouts/benelux_bm.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
tryouts "Alias method speed", :benchmark do
|
4
|
-
set :runcount, 1_000
|
5
|
-
|
6
|
-
setup do
|
7
|
-
module A;
|
8
|
-
extend self
|
9
|
-
def meth1; end
|
10
|
-
def meth2; end
|
11
|
-
alias_method :meth2_orig, :meth2
|
12
|
-
def meth2; end
|
13
|
-
def meth2_with_call; meth2_orig; end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
[10, 100].each do |mult|
|
18
|
-
count = runcount * mult
|
19
|
-
|
20
|
-
drill "Natural method (#{count})", count do
|
21
|
-
A.meth1
|
22
|
-
end
|
23
|
-
|
24
|
-
drill "Aliased method (#{count})", count do
|
25
|
-
A.meth2
|
26
|
-
end
|
27
|
-
|
28
|
-
drill "Aliased method w/ call (#{count})", count do
|
29
|
-
A.meth2_with_call
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
|
2
|
-
xtryouts "Array speed", :benchmark do
|
3
|
-
set :base, []
|
4
|
-
|
5
|
-
drill "Populate array" do
|
6
|
-
10_000_000.times { base << 1 }
|
7
|
-
end
|
8
|
-
|
9
|
-
drill "with <<" do
|
10
|
-
a = []
|
11
|
-
base.each { |v|
|
12
|
-
a << v
|
13
|
-
}
|
14
|
-
a.flatten!
|
15
|
-
end
|
16
|
-
|
17
|
-
# SLOOOOOWWWWW (b/c it creates a new Array every iteration)
|
18
|
-
xdrill "with +=" do
|
19
|
-
a = []
|
20
|
-
base.each {|v|
|
21
|
-
a += [v]
|
22
|
-
}
|
23
|
-
a
|
24
|
-
end
|
25
|
-
|
26
|
-
drill "with select" do
|
27
|
-
a = base.select { |v|
|
28
|
-
true
|
29
|
-
}
|
30
|
-
Array.new(a)
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
tryouts "Array merge speed", :benchmark do
|
37
|
-
set :size, 10_000_000
|
38
|
-
set :merges, 100_000
|
39
|
-
|
40
|
-
drill "Create #{size} element Array" do
|
41
|
-
final = []
|
42
|
-
size.times { final << 1 }
|
43
|
-
end
|
44
|
-
|
45
|
-
drill "Merge #{size} element Array" do
|
46
|
-
all = []
|
47
|
-
msize = size / merges
|
48
|
-
merges.times do
|
49
|
-
a = []
|
50
|
-
msize.times { a << 1 }
|
51
|
-
all << a
|
52
|
-
end
|
53
|
-
final = []
|
54
|
-
all.each { |a| final.push *a }
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'threadify'
|
4
|
-
|
5
|
-
parallel = 20
|
6
|
-
runcount = 100_000
|
7
|
-
baseline = []
|
8
|
-
testcase = []
|
9
|
-
|
10
|
-
def timer(&blk)
|
11
|
-
s = Time.now; blk.call; puts ('%.4f' % (Time.now - s).to_f)
|
12
|
-
end
|
13
|
-
|
14
|
-
print "Populate baseline: "
|
15
|
-
timer do
|
16
|
-
parallel.times do
|
17
|
-
seed = "a"
|
18
|
-
(runcount).times do
|
19
|
-
baseline << seed.succ!.clone
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
print "Start #{parallel} threads: "
|
25
|
-
threads = []
|
26
|
-
timer do
|
27
|
-
parallel.times do
|
28
|
-
threads << Thread.new do
|
29
|
-
seed = "a"
|
30
|
-
runcount.times { testcase << seed.succ!.clone }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
print "Wait for threads: "
|
36
|
-
timer do
|
37
|
-
threads.each { |t| t.join }
|
38
|
-
end
|
39
|
-
|
40
|
-
# Compare baseline to testcase
|
41
|
-
p [:size, testcase.size == baseline.size]
|
42
|
-
p [:sorted, testcase.sort == baseline.sort]
|
43
|
-
|
44
|
-
# Q: Why does the testcase Array seem to repeat perfectly?
|
45
|
-
# [a,b,c,d,a,b,c,d,a,b,c,d]
|
46
|
-
|
47
|
-
__END__
|
48
|
-
|
49
|
-
Module.method_added?
|
@@ -1,30 +0,0 @@
|
|
1
|
-
group "Benelux Concept Proofs"
|
2
|
-
|
3
|
-
xtryouts "Time benchmarks", :benchmark do
|
4
|
-
set :runcount, 100000
|
5
|
-
|
6
|
-
drill "Create Array", 1 do
|
7
|
-
@@timers = []
|
8
|
-
end
|
9
|
-
|
10
|
-
drill "Time.now overhead", 5 do
|
11
|
-
runcount.times { Time.now.to_f }
|
12
|
-
end
|
13
|
-
|
14
|
-
drill "[] << Time.now overhead", 5 do
|
15
|
-
runcount.times { @@timers << Time.now.to_f }
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'date'
|
21
|
-
tryouts "Time proofs", :api do
|
22
|
-
set :runcount, 100000
|
23
|
-
|
24
|
-
drill "All calls to Time.now.to_f are unique (will fail)", 0 do
|
25
|
-
timers = []
|
26
|
-
runcount.times { timers << Time.now.to_f; sleep 0.00000001 }
|
27
|
-
timers.size - timers.uniq.size
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|