Sha256: 3a8d6440f2cc28c096f063778d33abf0dd17e3eb7d10cacebeeefadd45aff163

Contents?: true

Size: 1.84 KB

Versions: 21

Compression:

Stored size: 1.84 KB

Contents

require 'benchmark'

$n = 10000
size = 100

puts "size: #{size}"
puts

def report
  reals = []
  Benchmark.benchmark do |bm|
    3.times do
      reals << bm.report { $n.times { yield } }.real
    end
  end

  reals.inject(&:+) / reals.count
end

avgs = []

puts "map then flatten"
avgs << report {
  (1..size).
    map {|n| [n]}.
    flatten
}

puts

puts "flat_map"
avgs << report {
  (1..size).
    flat_map {|n| [n]}
}

puts avgs
if avgs[0] < avgs[1]
  puts "map then flatten faster by #{((1.0 - avgs[0]/avgs[1]) * 100).round(2)} %"
else
  puts "flat_map faster by #{((1.0 - avgs[1]/avgs[0]) * 100).round(2)} %"
end

__END__

for each size (10, 100, 1000) showing smallest diff
  between map-then-flatten and flat_map in at least
  5 runs

size: 10

map then flatten
   0.550000   0.000000   0.550000 (  0.547897)
   0.570000   0.000000   0.570000 (  0.565139)
   0.550000   0.000000   0.550000 (  0.557421)

flat_map
   0.320000   0.000000   0.320000 (  0.316801)
   0.320000   0.010000   0.330000 (  0.325373)
   0.330000   0.000000   0.330000 (  0.325169)

flat_map faster by 42.09 %

**********************************************

size: 100

map then flatten
   0.390000   0.000000   0.390000 (  0.387307)
   0.390000   0.000000   0.390000 (  0.387630)
   0.380000   0.000000   0.380000 (  0.389421)

flat_map
   0.250000   0.000000   0.250000 (  0.259444)
   0.270000   0.000000   0.270000 (  0.261972)
   0.250000   0.000000   0.250000 (  0.252584)

flat_map faster by 33.53 %

**********************************************

size: 1000

map then flatten
   0.380000   0.000000   0.380000 (  0.382788)
   0.380000   0.000000   0.380000 (  0.372447)
   0.370000   0.000000   0.370000 (  0.370065)

flat_map
   0.240000   0.000000   0.240000 (  0.240357)
   0.240000   0.000000   0.240000 (  0.242325)
   0.240000   0.000000   0.240000 (  0.240985)

flat_map faster by 35.69 %

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
opal-rspec-1.1.0.alpha3 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-1.1.0.alpha2 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-1.1.0.alpha1 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-1.0.0 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-1.0.0.alpha1 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.8.0 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.8.0.alpha3 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.8.0.alpha2 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.8.0.alpha1 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.7.1 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.7.0 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.6.2 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.7.0.rc.2 rspec-core/upstream/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.6.1 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.6.0 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.6.0.beta1 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-connect-rspec-0.5.0 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.5.0 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.5.0.beta3 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb
opal-rspec-0.5.0.beta2 rspec-core/benchmarks/map_then_flatten_vs_flat_map_benchmarks.rb