viiite 0.1.0 → 0.2.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 (113) hide show
  1. data/CHANGELOG.md +70 -0
  2. data/Gemfile +2 -9
  3. data/Gemfile.lock +11 -32
  4. data/README.md +42 -123
  5. data/examples/bench_attr_vs_method-1.8.7.jpeg +0 -0
  6. data/examples/bench_attr_vs_method-1.9.3.jpeg +0 -0
  7. data/examples/bench_attr_vs_method.rb +18 -0
  8. data/examples/bench_iteration.rb +2 -4
  9. data/examples/bench_sort.rb +2 -7
  10. data/lib/viiite.rb +40 -18
  11. data/lib/viiite/bdb.rb +28 -0
  12. data/lib/viiite/bdb/cached.rb +63 -0
  13. data/lib/viiite/bdb/immediate.rb +46 -0
  14. data/lib/viiite/bdb/utils.rb +16 -0
  15. data/lib/viiite/benchmark.rb +35 -0
  16. data/lib/viiite/benchmark/runner.rb +50 -0
  17. data/lib/viiite/command.rb +33 -2
  18. data/lib/viiite/command/commons.rb +22 -0
  19. data/lib/viiite/command/help.rb +4 -5
  20. data/lib/viiite/command/plot.rb +44 -44
  21. data/lib/viiite/command/plot/to_gnuplot.rb +65 -0
  22. data/lib/viiite/command/{graph_style.rash → plot/to_gnuplot_graph.rash} +0 -0
  23. data/lib/viiite/command/{serie_style.rash → plot/to_gnuplot_serie.rash} +0 -0
  24. data/lib/viiite/command/plot/to_highcharts.rb +38 -0
  25. data/lib/viiite/command/plot/to_highcharts_graph.rb +29 -0
  26. data/lib/viiite/command/plot/to_text.rb +30 -0
  27. data/lib/viiite/command/report.rb +32 -10
  28. data/lib/viiite/command/run.rb +30 -7
  29. data/lib/viiite/errors.rb +5 -0
  30. data/lib/viiite/loader.rb +2 -2
  31. data/lib/viiite/tms.rb +21 -31
  32. data/lib/viiite/version.rb +5 -5
  33. data/spec/fixtures/bdb/Array/bench_sort.rb +7 -0
  34. data/spec/fixtures/{bench_iteration.rb → bdb/bench_iteration.rb} +2 -4
  35. data/spec/fixtures/command/bench_iteration.rb +3 -0
  36. data/spec/fixtures/saved/Array/bench_sort.rash +12 -0
  37. data/spec/fixtures/saved/bench_iteration.rash +18 -0
  38. data/spec/integration/plot/plot_1.cmd +1 -0
  39. data/spec/integration/plot/plot_1.stdout +64 -0
  40. data/spec/integration/plot/plot_2.cmd +1 -0
  41. data/spec/integration/plot/plot_2.stdout +37 -0
  42. data/spec/integration/plot/plot_3.cmd +1 -0
  43. data/spec/integration/plot/plot_3.stdout +64 -0
  44. data/spec/integration/plot/plot_4.cmd +1 -0
  45. data/spec/integration/plot/plot_4.stdout +1 -0
  46. data/spec/integration/report/viiite_report_1.cmd +1 -1
  47. data/spec/integration/report/viiite_report_1.stdout +7 -7
  48. data/spec/integration/report/viiite_report_2.cmd +1 -1
  49. data/spec/integration/report/viiite_report_2.stdout +22 -10
  50. data/spec/integration/report/viiite_report_3.cmd +1 -1
  51. data/spec/integration/report/viiite_report_3.stdout +46 -18
  52. data/spec/integration/report/viiite_report_4.cmd +1 -1
  53. data/spec/integration/report/viiite_report_4.stdout +34 -22
  54. data/spec/integration/report/viiite_report_5.cmd +1 -0
  55. data/spec/integration/report/viiite_report_5.stdout +7 -0
  56. data/spec/integration/report/viiite_report_6.cmd +1 -0
  57. data/spec/integration/report/viiite_report_6.stdout +7 -0
  58. data/spec/integration/report/viiite_report_7.cmd +1 -0
  59. data/spec/integration/report/viiite_report_7.stdout +7 -0
  60. data/spec/integration/report/viiite_report_8.cmd +1 -0
  61. data/spec/integration/report/viiite_report_8.stdout +16 -0
  62. data/spec/integration/report/viiite_report_9.cmd +1 -0
  63. data/spec/integration/report/viiite_report_9.stdout +88 -0
  64. data/spec/integration/test_command.rb +19 -23
  65. data/spec/integration/viiite/viiite_help.stdout +6 -0
  66. data/spec/spec_helper.rb +11 -17
  67. data/spec/unit/bdb/cached/test_dataset.rb +68 -0
  68. data/spec/unit/bdb/immediate/test_benchmark.rb +31 -0
  69. data/spec/unit/bdb/immediate/test_dataset.rb +31 -0
  70. data/spec/unit/bdb/immediate/test_enumerable.rb +20 -0
  71. data/spec/unit/bdb/immediate/test_pattern.rb +25 -0
  72. data/spec/unit/bdb/test_new.rb +44 -0
  73. data/spec/unit/bdb/utils/test_bench_file.rb +24 -0
  74. data/spec/unit/bdb/utils/test_replace_extension.rb +21 -0
  75. data/spec/unit/benchmark/bench_add.rb +3 -0
  76. data/spec/unit/benchmark/test_new.rb +28 -0
  77. data/spec/unit/command/commons/existing.rash +1 -0
  78. data/spec/unit/command/commons/test_single_source.rb +64 -0
  79. data/spec/unit/{formatter/plot → command/plot/gnuplot_utils}/test_to_data.rb +4 -4
  80. data/spec/unit/{formatter/plot → command/plot/gnuplot_utils}/test_to_dataset.rb +5 -5
  81. data/spec/unit/{formatter/plot → command/plot/gnuplot_utils}/test_to_plot.rb +4 -4
  82. data/spec/unit/command/test_run.rb +25 -12
  83. data/spec/unit/{test_runner.rb → test_benchmark.rb} +30 -11
  84. data/spec/unit/test_viiite.rb +17 -4
  85. data/spec/unit/tms/test_attributes.rb +11 -0
  86. data/spec/unit/tms/test_coerce.rb +11 -23
  87. data/spec/unit/tms/test_conversions.rb +23 -0
  88. data/spec/unit/tms/test_operations.rb +22 -0
  89. data/tasks/clean.rake +1 -1
  90. data/tasks/debug_mail.rake +13 -13
  91. data/tasks/gem.rake +13 -13
  92. data/tasks/integration_test.rake +3 -3
  93. data/tasks/spec_test.rake +9 -9
  94. data/tasks/unit_test.rake +9 -10
  95. data/tasks/yard.rake +13 -13
  96. data/viiite.gemspec +26 -29
  97. data/viiite.noespec +4 -7
  98. metadata +335 -235
  99. data/examples/bench_sort.eps +0 -816
  100. data/examples/bench_sort.rash +0 -100
  101. data/examples/raw.rash +0 -6
  102. data/lib/viiite/formatter.rb +0 -5
  103. data/lib/viiite/formatter/plot.rb +0 -38
  104. data/lib/viiite/runner.rb +0 -59
  105. data/lib/viiite/viiite_file.rb +0 -20
  106. data/spec/integration/raw_data.rash +0 -6
  107. data/spec/unit/tms/test_divide.rb +0 -26
  108. data/spec/unit/tms/test_minus.rb +0 -26
  109. data/spec/unit/tms/test_plus.rb +0 -34
  110. data/spec/unit/tms/test_times.rb +0 -26
  111. data/spec/unit/tms/test_to_a.rb +0 -11
  112. data/spec/unit/tms/test_to_ruby_literal.rb +0 -11
  113. data/spec/unit/tms/test_to_s.rb +0 -11
@@ -0,0 +1,65 @@
1
+ module Viiite
2
+ class Command
3
+ class Plot
4
+
5
+ options do |opt|
6
+ opt.on("--gnuplot=[TERM]",
7
+ "Render output as a gnuplot text (and terminal)") do |value|
8
+ @render = :gnuplot
9
+ @gnuplot_term = (value || "dumb").to_sym
10
+ @graph_style = load_style("to_gnuplot_graph.rash", __FILE__) unless @graph_style
11
+ @serie_style = load_style("to_gnuplot_serie.rash", __FILE__) unless @serie_style
12
+ end
13
+ end
14
+
15
+ def to_gnuplot_query(lispy, op)
16
+ lispy = Alf.lispy
17
+ op = lispy.summarize(op, [@graph, @series, @abscissa].compact,
18
+ {:y => "avg{ #{@ordinate} }"})
19
+ op = lispy.join(op, @serie_style) if @serie_style
20
+ op = lispy.rename(op, @graph => :graph, @abscissa => :x, @series => :serie)
21
+ op = lispy.group(op, [:x, :y], :data)
22
+ op = lispy.rename(op, :serie => :title)
23
+ op = lispy.group(op, [:graph], :series, {:allbut => true})
24
+ op = lispy.join(op, @graph_style) if @graph_style
25
+ op = lispy.rename(op, :graph => :title)
26
+ op
27
+ end
28
+
29
+ def to_gnuplot(lispy, op)
30
+ puts "set terminal #{@gnuplot_term}"
31
+ GnuplotUtils.to_plots(op.to_a, $stdout)
32
+ end
33
+
34
+ module GnuplotUtils
35
+ extend self
36
+ def to_data(rel)
37
+ [rel.collect{|t| t[:x]}, rel.collect{|t| t[:y]}]
38
+ end
39
+ def to_dataset(tuple)
40
+ ds = Gnuplot::DataSet.new(to_data(tuple[:data]))
41
+ tuple.each_pair do |k,v|
42
+ next if k == :data
43
+ ds.send(:"#{k}=", v) if ds.respond_to?(:"#{k}=")
44
+ end
45
+ ds
46
+ end
47
+ def to_plot(graph)
48
+ Gnuplot::Plot.new do |plot|
49
+ graph.each_pair do |k,v|
50
+ next if k == :series
51
+ plot.set(k.id2name, v)
52
+ end
53
+ plot.data = graph[:series].collect{|d| to_dataset(d)}
54
+ end
55
+ end
56
+ def to_plots(graphs, buffer = "")
57
+ graphs.each do |tuple|
58
+ buffer << to_plot(tuple).to_gplot << "\n"
59
+ end
60
+ end
61
+ end # module Utils
62
+
63
+ end # class Plot
64
+ end # class Command
65
+ end # module Viiite
@@ -0,0 +1,38 @@
1
+ module Viiite
2
+ class Command
3
+ class Plot
4
+
5
+ options do |opt|
6
+ opt.on("--highcharts=[TERM]",
7
+ "Render output for highcharts.js") do |value|
8
+ @render = :highcharts
9
+ @highcharts_term = (value || "json").to_sym
10
+ @graph_style = load_style("to_highcharts_graph.rb", __FILE__) unless @graph_style
11
+ end
12
+ end
13
+
14
+ def to_highcharts_query(lispy, op)
15
+ lispy = Alf.lispy
16
+ op = lispy.summarize(op, [@graph, @series, @abscissa].compact,
17
+ {:y => "avg{ #{@ordinate} }"})
18
+ op = lispy.rename(op, @graph => :graph, @abscissa => :x, @series => :serie)
19
+ op = lispy.summarize(op,
20
+ [:x, :y],
21
+ {:data => lispy.collect{ [x, y] }},
22
+ {:allbut => true})
23
+ op = lispy.rename(op, :serie => :name)
24
+ op = lispy.group(op, [:name, :data], :series)
25
+ op = lispy.join(op, @graph_style) if @graph_style
26
+ op = lispy.extend(op, :title => lambda{ title.merge(:text => graph) })
27
+ op = lispy.project(op, [:graph], {:allbut => true})
28
+ op
29
+ end
30
+
31
+ def to_highcharts(lispy, op)
32
+ require 'json'
33
+ puts op.to_a.to_json
34
+ end
35
+
36
+ end # class Plot
37
+ end # class Command
38
+ end # module Viiite
@@ -0,0 +1,29 @@
1
+ Alf::Relation[{
2
+ :chart => {
3
+ :renderTo => 'container',
4
+ :defaultSeriesType => 'line',
5
+ :marginRight => 170,
6
+ :marginBottom => 25
7
+ },
8
+ :title => {
9
+ :x => -20
10
+ },
11
+ :yAxis => {
12
+ :title => {
13
+ :text => 'Time (sec.)'
14
+ },
15
+ :plotLines => [{
16
+ :value => 0,
17
+ :width => 1,
18
+ :color => '#808080'
19
+ }]
20
+ },
21
+ :legend => {
22
+ :layout => 'vertical',
23
+ :align => 'right',
24
+ :verticalAlign => 'top',
25
+ :x => -10,
26
+ :y => 100,
27
+ :borderWidth => 0
28
+ }
29
+ }]
@@ -0,0 +1,30 @@
1
+ module Viiite
2
+ class Command
3
+ class Plot
4
+
5
+ options do |opt|
6
+ @render = :text
7
+ opt.on('--text', "Render output as a text table") do
8
+ @render = :text
9
+ end
10
+ end
11
+
12
+ def to_text_query(lispy, op)
13
+ lispy = Alf.lispy
14
+ op = lispy.summarize(op, [@graph, @series, @abscissa].compact,
15
+ {:y => "avg{ #{@ordinate} }"})
16
+ op = lispy.rename(op, @graph => :graph, @abscissa => :x, @series => :serie)
17
+ op = lispy.group(op, [:x, :y], :data)
18
+ op = lispy.rename(op, :serie => :title)
19
+ op = lispy.group(op, [:graph], :series, {:allbut => true})
20
+ op = lispy.rename(op, :graph => :title)
21
+ op
22
+ end
23
+
24
+ def to_text(lispy, op)
25
+ Alf::Renderer.text(op).execute($stdout)
26
+ end
27
+
28
+ end # class Plot
29
+ end # class Command
30
+ end # module Viiite
@@ -10,6 +10,7 @@ module Viiite
10
10
  # #{summarized_options}
11
11
  #
12
12
  class Report < Quickl::Command(__FILE__, __LINE__)
13
+ include Commons
13
14
 
14
15
  options do |opt|
15
16
 
@@ -20,28 +21,49 @@ module Viiite
20
21
  end
21
22
 
22
23
  @hierarchy = false
23
- opt.on('-h', "--hierarchy", "Make a hierarchical regrouping") do
24
+ opt.on('-h', "--hierarchy",
25
+ "Make a hierarchical regrouping") do
24
26
  @hierarchy = true
25
27
  end
26
28
 
29
+ @stddev = false
30
+ opt.on("--stddev=[FIELD]",
31
+ "Add the standard deviation on FIELD") do |field|
32
+ @stddev = field || "tms.total"
33
+ end
34
+
35
+ @ff = "%.6f"
36
+ opt.on("--ff=FORMAT",
37
+ "Specify the floating point format") do |val|
38
+ @ff = val
39
+ end
27
40
  end
28
41
 
29
42
  def query(op)
30
43
  lispy = Alf.lispy
31
- op = lispy.summarize(op, @regroup, :measure => lispy.avg{tms})
32
- @regroup[1..-1].each do |grouping|
33
- op = lispy.group(op, [grouping] + [:measure], :measure)
34
- end if @hierarchy
44
+ aggs = {:user => lispy.avg{tms.utime},
45
+ :system => lispy.avg{tms.stime},
46
+ :total => lispy.avg{tms.total},
47
+ :real => lispy.avg{tms.real}}
48
+ aggs[:stddev] = "stddev{ #{@stddev} }" if @stddev
49
+ op = lispy.summarize(op, @regroup, aggs)
50
+ depend = [:user, :system, :total, :real]
51
+ depend += [:stddev] if @stddev
52
+ @regroup[1..-1].reverse.each do |grouping|
53
+ op = lispy.group(op, [grouping] + depend, :measure)
54
+ depend = [:measure]
55
+ end if @hierarchy
35
56
  op
36
57
  end
37
58
 
38
- def execute(args)
39
- raise Quickl::InvalidArgument if args.size > 1
40
- op = query Alf::Reader.reader(args.first || $stdin)
41
- Alf::Renderer.text(op).execute($stdout)
59
+ def execute(argv)
60
+ op = single_source(argv) do |bdb, arg|
61
+ bdb.dataset(arg)
62
+ end
63
+ op = query(op)
64
+ Alf::Renderer.text(op, {:float_format => @ff}).execute($stdout)
42
65
  end
43
66
 
44
67
  end # class Report
45
68
  end # class Command
46
69
  end # module Viiite
47
-
@@ -1,6 +1,6 @@
1
1
  module Viiite
2
2
  class Command
3
- #
3
+ #
4
4
  # Run a benchmark and output raw data
5
5
  #
6
6
  # SYNOPSIS
@@ -10,12 +10,35 @@ module Viiite
10
10
  # #{summarized_options}
11
11
  #
12
12
  class Run < Quickl::Command(__FILE__, __LINE__)
13
-
14
- def execute(args)
15
- raise Quickl::InvalidArgument if args.size > 1
16
- input = Alf::Reader.reader(args.first || $stdin)
17
- output = $stdout
18
- Alf::Renderer.rash(input).execute(output)
13
+ include Commons
14
+
15
+ options do |opt|
16
+ @runs = 1
17
+ opt.on("--runs=[NB]",
18
+ "Run the benchmark NB times") do |val|
19
+ @runs = val.to_i
20
+ @run_key = :run unless @run_key
21
+ end
22
+ @run_key = nil
23
+ opt.on("--run-key=[KEY]",
24
+ "Specify the run key (default to :run)") do |val|
25
+ @run_key = val.to_sym
26
+ end
27
+ end
28
+
29
+ def execute(argv)
30
+ argv = requester.bdb.to_rel.collect{|t| t[:name]} if argv.empty?
31
+ argv.each do |name|
32
+ benchmark = single_source([name]) do |bdb, arg|
33
+ bdb.benchmark(arg)
34
+ end
35
+ @runs.times do |run|
36
+ benchmark.each do |tuple|
37
+ tuple[@run_key] = run if @run_key
38
+ puts Alf::Tools.to_ruby_literal(tuple)
39
+ end
40
+ end
41
+ end
19
42
  end
20
43
 
21
44
  end # class Run
@@ -0,0 +1,5 @@
1
+ module Viiite
2
+ class Error < StandardError; end
3
+ class NoSuchBenchmarkError < Error; end
4
+ class InvalidPattern < Error; end
5
+ end
@@ -1,3 +1,3 @@
1
1
  require "alf"
2
- require "quickl"
3
- require "gnuplot"
2
+ require "gnuplot"
3
+ require "json"
@@ -1,36 +1,30 @@
1
1
  module Viiite
2
- class Tms
2
+ class Tms < Struct.new(:utime, :stime, :cutime, :cstime, :real)
3
3
 
4
4
  FMTSTR = "%10.6u %10.6y %10.6t %10.6r"
5
- FIELDS = [:utime, :stime, :cutime, :cstime, :real]
6
5
 
7
- def initialize(tms)
8
- @tms = tms
6
+ def initialize(utime, stime, cutime, cstime, real)
7
+ super # ensure we have all 5 non-nil arguments
9
8
  end
10
9
 
11
10
  def self.coerce(arg)
12
11
  case arg
13
12
  when Viiite::Tms
14
13
  arg
15
- when Benchmark::Tms
16
- Viiite::Tms.new arg.to_a[1..-1]
17
14
  when Numeric
18
- Viiite::Tms.new [arg, 0.0, 0.0, 0.0, 0.0]
15
+ Viiite::Tms.new arg, 0.0, 0.0, 0.0, 0.0
19
16
  when Hash
20
- Viiite::Tms.new FIELDS.collect{|f| arg[f] || 0.0}
17
+ Viiite::Tms.new(*members.collect{|f| arg[f] || 0.0})
21
18
  when Array
22
- Viiite::Tms.new arg
19
+ Viiite::Tms.new(*arg)
23
20
  else
24
21
  raise ArgumentError, "Invalid value #{arg.inspect} for Viiite::Tms"
25
22
  end
26
23
  end
27
24
 
28
- def utime; @tms[0]; end
29
- def stime; @tms[1]; end
30
- def cutime; @tms[2]; end
31
- def cstime; @tms[3]; end
32
- def real; @tms[4]; end
33
- def total; cutime + cstime + stime + utime; end
25
+ def total
26
+ cutime + cstime + stime + utime
27
+ end
34
28
 
35
29
  def to_ruby_literal
36
30
  "Viiite::Tms(#{to_a.collect{|f| f.inspect}.join(',')})"
@@ -46,22 +40,9 @@ module Viiite
46
40
  end
47
41
 
48
42
  def to_h
49
- @to_h ||= Hash[FIELDS.collect{|f| [f, send(f)]}]
50
- end
51
-
52
- def to_a
53
- @to_a ||= FIELDS.collect{|f| send(f)}
54
- end
55
-
56
- def hash
57
- to_a.hash
43
+ @to_h ||= Hash[members.zip(values)]
58
44
  end
59
45
 
60
- def ==(other)
61
- other.is_a?(Tms) && (other.to_a == self.to_a)
62
- end
63
- alias :eql? :==
64
-
65
46
  def format(arg0 = nil, *args)
66
47
  fmtstr = (arg0 || FMTSTR).dup
67
48
  fmtstr.gsub!(/(%[-+\.\d]*)u/){"#{$1}f" % utime}
@@ -79,11 +60,20 @@ module Viiite
79
60
  def memberwise(op, x)
80
61
  case x
81
62
  when Viiite::Tms
82
- Viiite::Tms.new FIELDS.collect{|f| __send__(f).__send__(op, x.send(f))}
63
+ Viiite::Tms.new(*values.zip(x.values).collect {|a,b| a.send(op, b)})
83
64
  else
84
- Viiite::Tms.new FIELDS.collect{|f| __send__(f).__send__(op, x)}
65
+ Viiite::Tms.new(*values.collect{|v| v.send(op, x)})
85
66
  end
86
67
  end
87
68
 
69
+ if RUBY_VERSION < '1.9'
70
+ public
71
+ def members; super.map(&:to_sym); end
72
+ def self.members; super.map(&:to_sym); end
73
+ end
88
74
  end # class Tms
75
+
76
+ def self.Tms(*args)
77
+ Viiite::Tms.new(*args)
78
+ end
89
79
  end # module Viiite
@@ -1,14 +1,14 @@
1
1
  module Viiite
2
2
  module Version
3
-
3
+
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 2
6
6
  TINY = 0
7
-
7
+
8
8
  def self.to_s
9
9
  [ MAJOR, MINOR, TINY ].join('.')
10
10
  end
11
-
12
- end
11
+
12
+ end
13
13
  VERSION = Version.to_s
14
14
  end
@@ -0,0 +1,7 @@
1
+ Viiite.bench do |b|
2
+ b.variation_point :ruby, Viiite.which_ruby
3
+ b.range_over([100, 1000], :size) do |size|
4
+ bench_case = Array.new(size) { rand }
5
+ b.report(:"Array#sort") { bench_case.sort }
6
+ end
7
+ end
@@ -1,9 +1,7 @@
1
- require 'viiite'
2
- n = 15000
3
- Viiite.bm do |r|
1
+ Viiite.bench do |r|
2
+ n = 1000
4
3
  r.variation_point :ruby, Viiite.which_ruby
5
4
  r.report(:for) { for i in 1..n; a = "1"; end }
6
5
  r.report(:times) { n.times do ; a = "1"; end }
7
6
  r.report(:upto) { 1.upto(n) do ; a = "1"; end }
8
7
  end
9
-
@@ -0,0 +1,3 @@
1
+ Viiite.bench do |r|
2
+ r.report(:times) { 15.times do; a = "1"; end }
3
+ end
@@ -0,0 +1,12 @@
1
+ {:ruby => "jruby 1.6.3", :size => 100, :bench => :"Array#sort", :tms => Viiite::Tms(0.00200009346008301,0.0,0.0,0.0,0.00200009346008301)}
2
+ {:ruby => "jruby 1.6.3", :size => 1000, :bench => :"Array#sort", :tms => Viiite::Tms(0.0189998149871826,0.0,0.0,0.0,0.0199999809265137)}
3
+ {:size => 100, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.00038504600524902344), :ruby => "rubinius 2.0.0dev"}
4
+ {:size => 1000, :bench => :"Array#sort", :tms => Viiite::Tms(0.0040000000000000036,0.0,0.0,0.0,0.005118131637573242), :ruby => "rubinius 2.0.0dev"}
5
+ {:bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,8.20159912109375e-05), :size => 100, :ruby => "ruby 1.8.7"}
6
+ {:bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.00109100341796875), :size => 1000, :ruby => "ruby 1.8.7"}
7
+ {:ruby => "rubinius 1.2.5dev", :size => 100, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.0003991127014160156)}
8
+ {:ruby => "rubinius 1.2.5dev", :size => 1000, :bench => :"Array#sort", :tms => Viiite::Tms(0.02800199999999997,0.0,0.0,0.0,0.04252505302429199)}
9
+ {:ruby => "ruby 1.9.3dev", :size => 100, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,8.368492126464844e-05)}
10
+ {:ruby => "ruby 1.9.3dev", :size => 1000, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.0011630058288574219)}
11
+ {:ruby => "ruby 1.9.2p290", :size => 100, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,8.0108642578125e-05)}
12
+ {:ruby => "ruby 1.9.2p290", :size => 1000, :bench => :"Array#sort", :tms => Viiite::Tms(0.0,0.0,0.0,0.0,0.0011208057403564453)}