summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-02-07 05:19:29 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-02-07 05:19:29 +0000
commita02a8dfa5a9dba2d2dec7a8239af52958a7d7c0e (patch)
tree9aa2ff815d55b74c88929efb5e9ad0448b402166
parent950d15bc97a57252edcef98ff83c07c87757095e (diff)
test/unit.rb: most-asserted
* test/lib/test/unit.rb (Statistics#record): record most asserted tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--test/lib/test/unit.rb36
1 files changed, 27 insertions, 9 deletions
diff --git a/test/lib/test/unit.rb b/test/lib/test/unit.rb
index 9cad662..03c56d8 100644
--- a/test/lib/test/unit.rb
+++ b/test/lib/test/unit.rb
@@ -587,12 +587,22 @@ module Test
end
module Statistics
+ def update_list(list, rec, max)
+ if i = list.empty? ? 0 : list.bsearch_index {|*a| yield(*a)}
+ list[i, 0] = [rec]
+ list[max..-1] = [] if list.size >= max
+ end
+ end
+
def record(suite, method, assertions, time, error)
- if max = @options[:longest]
- longest = @longest ||= []
- if i = longest.empty? ? 0 : longest.bsearch_index {|_,_,_,t,_|t<time}
- longest[i, 0] = [[suite.name, method, assertions, time, error]]
- longest[max..-1] = [] if longest.size >= max
+ if @options.values_at(:longest, :most_asserted).any?
+ @tops ||= {}
+ rec = [suite.name, method, assertions, time, error]
+ if max = @options[:longest]
+ update_list(@tops[:longest] ||= [], rec, max) {|_,_,_,t,_|t<time}
+ end
+ if max = @options[:most_asserted]
+ update_list(@tops[:most_asserted] ||= [], rec, max) {|_,_,a,_,_|a<assertions}
end
end
# (((@record ||= {})[suite] ||= {})[method]) = [assertions, time, error]
@@ -601,10 +611,15 @@ module Test
def run(*args)
result = super
- if defined?(@longest) and @longest
- @longest.each {|suite, method, assertions, time, error|
- printf "%5.2fsec(%d): %s#%s\n", time, assertions, suite, method
- }
+ if @tops ||= nil
+ @tops.each do |t, list|
+ if list
+ puts "#{t.to_s.tr('_', ' ')} tests:"
+ list.each {|suite, method, assertions, time, error|
+ printf "%5.2fsec(%d): %s#%s\n", time, assertions, suite, method
+ }
+ end
+ end
end
result
end
@@ -616,6 +631,9 @@ module Test
opts.on '--longest=N', Integer, 'Show longest N tests' do |n|
options[:longest] = n
end
+ opts.on '--most-asserted=N', Integer, 'Show most asserted N tests' do |n|
+ options[:most_asserted] = n
+ end
end
end