fastruby / fast-ruby

:dash: Writing Fast Ruby :heart_eyes: -- Collect Common Ruby idioms.
https://github.com/fastruby/fast-ruby
5.67k stars 376 forks source link

Comparison logic vs `between?` vs `include?` #225

Open ydakuka opened 11 months ago

ydakuka commented 11 months ago
#!/usr/local/bin/ruby

require 'benchmark/ips'

Benchmark.ips do |x|
  value = 42

  x.report('>= && <=') { value >= 1000 && value <= 2000 }
  x.report('include?') { (1000..2000).include?(value) }
  x.report('between?') { value.between?(1000, 2000) }

  x.compare!
end
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin19]

$ ruby bench.rb
Warming up --------------------------------------
            >= && <=     2.351M i/100ms
            include?     1.139M i/100ms
            between?     1.244M i/100ms
Calculating -------------------------------------
            >= && <=     23.476M (± 1.3%) i/s -    117.558M in   5.008408s
            include?     11.117M (± 8.2%) i/s -     55.807M in   5.057945s
            between?     11.021M (± 6.8%) i/s -     55.959M in   5.102033s

Comparison:
            >= && <=: 23475928.0 i/s
            include?: 11117073.1 i/s - 2.11x  slower
            between?: 11020978.6 i/s - 2.13x  slower