Last active
June 17, 2022 01:13
-
-
Save texpert/29ea5096f14af38b9b4698678a8b784a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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