-
-
Save evanphx/912835 to your computer and use it in GitHub Desktop.
kendall :: git/rbx » ruby scratch/bm_either.rb | |
Rehearsal --------------------------------------------- | |
includes? 4.410000 0.000000 4.410000 ( 4.421223) | |
either? 6.450000 0.000000 6.450000 ( 6.478906) | |
compare 2.040000 0.010000 2.050000 ( 2.044516) | |
----------------------------------- total: 12.910000sec | |
user system total real | |
includes? 4.470000 0.000000 4.470000 ( 4.479386) | |
either? 6.520000 0.000000 6.520000 ( 6.542424) | |
compare 2.050000 0.010000 2.060000 ( 2.061919) |
require 'benchmark' | |
class Object | |
def either?(*args) | |
args.include? self | |
end | |
end | |
count = 10000000 | |
Benchmark.bmbm do |x| | |
x.report "includes?" do | |
count.times do | |
[:one, :two].include?(:one) | |
end | |
end | |
x.report "either?" do | |
count.times do | |
:one.either?(:one, :two) | |
end | |
end | |
x.report "compare" do | |
count.times do | |
:one == :one or :one == :two | |
end | |
end | |
end |
includes? runs in 1.4s and either? runs in 1.8s. in? runs in 1.73s.
Yep, totally true. Part of my original point was to challenge the idea that #include? is itself a good idea and that direct comparison should be considered if there are only 2 elements being compared with.
Ah, I see what you mean. You consider even include? to be too slow :). But yeah, if we have anything like that in a hot spot flow, we can totally replace it with direct comparison. I'd consider that to be a pretty extreme perf optimization that I'd want solid evidence for making a big difference.
Thanks for adding some stats to the discussion, though. It's great that we now know that it's 23%/28% slower than include? and that inlining direct comparison can save you double up.
0.85 vs. 1.73 is where I was indicating the 2x.