viiite 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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)}