Skip to content

Instantly share code, notes, and snippets.

@texpert
Last active June 17, 2022 01:13
Show Gist options
  • Save texpert/29ea5096f14af38b9b4698678a8b784a to your computer and use it in GitHub Desktop.
Save texpert/29ea5096f14af38b9b4698678a8b784a to your computer and use it in GitHub Desktop.
Warming up --------------------------------------
Array5#include? 196.263k i/100ms
Array5#find 102.092k i/100ms
Array5#bsearch 173.777k i/100ms
Array5#detect 97.253k i/100ms
Calculating -------------------------------------
Array5#include? 5.089M (±11.0%) i/s - 25.122M in 5.018964s
Array5#find 1.455M (± 4.9%) i/s - 7.351M in 5.062443s
Array5#bsearch 3.555M (± 6.6%) i/s - 17.725M in 5.007809s
Array5#detect 1.496M (± 5.9%) i/s - 7.488M in 5.021683s
Comparison:
Array5#include?: 5088826.0 i/s
Array5#bsearch: 3554816.8 i/s - 1.43x slower
Array5#detect: 1496412.2 i/s - 3.40x slower
Array5#find: 1455405.1 i/s - 3.50x slower
Warming up --------------------------------------
Array10#include? 175.131k i/100ms
Array10#find 73.418k i/100ms
Array10#bsearch 165.364k i/100ms
Array10#detect 72.318k i/100ms
Calculating -------------------------------------
Array10#include? 3.654M (± 6.5%) i/s - 18.214M in 5.004733s
Array10#find 972.327k (± 5.8%) i/s - 4.846M in 5.000684s
Array10#bsearch 3.359M (± 6.0%) i/s - 16.867M in 5.039465s
Array10#detect 955.124k (± 4.6%) i/s - 4.773M in 5.007553s
Comparison:
Array10#include?: 3654390.2 i/s
Array10#bsearch: 3359111.7 i/s - same-ish: difference falls within error
Array10#find: 972326.7 i/s - 3.76x slower
Array10#detect: 955123.6 i/s - 3.83x slower
Warming up --------------------------------------
Array15#include? 148.222k i/100ms
Array15#find 55.397k i/100ms
Array15#bsearch 148.502k i/100ms
Array15#detect 55.620k i/100ms
Calculating -------------------------------------
Array15#include? 2.819M (± 7.3%) i/s - 14.081M in 5.023266s
Array15#find 728.868k (± 5.6%) i/s - 3.656M in 5.032350s
Array15#bsearch 2.889M (± 6.4%) i/s - 14.405M in 5.006419s
Array15#detect 720.855k (± 5.5%) i/s - 3.615M in 5.030823s
Comparison:
Array15#bsearch: 2889138.1 i/s
Array15#include?: 2819313.9 i/s - same-ish: difference falls within error
Array15#find: 728868.4 i/s - 3.96x slower
Array15#detect: 720854.8 i/s - 4.01x slower
Warming up --------------------------------------
Array20#include? 130.620k i/100ms
Array20#find 48.557k i/100ms
Array20#bsearch 150.722k i/100ms
Array20#detect 47.121k i/100ms
Calculating -------------------------------------
Array20#include? 2.332M (± 6.7%) i/s - 11.625M in 5.006880s
Array20#find 595.521k (± 5.5%) i/s - 3.011M in 5.071184s
Array20#bsearch 2.760M (± 8.7%) i/s - 13.716M in 5.014230s
Array20#detect 571.997k (± 5.3%) i/s - 2.874M in 5.039438s
Comparison:
Array20#bsearch: 2759706.7 i/s
Array20#include?: 2332188.3 i/s - 1.18x slower
Array20#find: 595520.6 i/s - 4.63x slower
Array20#detect: 571996.7 i/s - 4.82x slower
Warming up --------------------------------------
Array100#include? 45.676k i/100ms
Array100#find 12.706k i/100ms
Array100#bsearch 115.279k i/100ms
Array100#detect 12.835k i/100ms
Calculating -------------------------------------
Array100#include? 567.491k (± 5.5%) i/s - 2.832M in 5.005513s
Array100#find 137.930k (± 5.3%) i/s - 698.830k in 5.080697s
Array100#bsearch 1.920M (± 6.7%) i/s - 9.568M in 5.005315s
Array100#detect 139.281k (± 5.2%) i/s - 705.925k in 5.082249s
Comparison:
Array100#bsearch: 1920245.6 i/s
Array100#include?: 567491.0 i/s - 3.38x slower
Array100#detect: 139281.0 i/s - 13.79x slower
Array100#find: 137930.1 i/s - 13.92x slower
Code:
-----------------------------
# frozen_string_literal: true
# Install the necessary gems:
# gem install benchmark-ips
# gem install kalibera
require 'benchmark/ips'
def make_array(num)
o = [('a'..'z'), ('A'..'Z')].flat_map(&:to_a)
data = []
num.times do
data << (0...10).map { o[rand(o.length)] }.join
end
data.sort!.freeze
[data, data[-1].dup]
end
def test(num)
array, item = make_array(num)
Benchmark.ips do |x|
x.report("Array#{num}#include?") { array.include? item }
x.report("Array#{num}#find") { array.find {|i| i == item } }
x.report("Array#{num}#bsearch") { array.bsearch {|i| i == item } }
x.report("Array#{num}#detect") { array.detect {|i| i == item } }
x.compare!
end
end
[5, 10, 15, 20, 100].each do |n|
test n
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment