Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save konovod/928318fa70eef9939dac90168e54ea50 to your computer and use it in GitHub Desktop.
Save konovod/928318fa70eef9939dac90168e54ea50 to your computer and use it in GitHub Desktop.
join bench
require "benchmark"
module Enumerable
def j8r_join(separator, io)
first = true
each do |elem|
io << separator unless first
yield elem, io
first = false
end
end
def new_join(separator, io)
first = true
each do |elem|
io << separator unless first
yield elem, io
first = false if first
end
end
end
SINGLE = Array.new(9, 123)
DOUBLE = Array.new(99, 123)
TRIPLE = Array.new(999, 123)
QUADRUPLE = Array.new(9999, 123)
QUINTUPLE = Array.new(99999, 123)
SEXTUPLE = Array.new(999999, 123)
SEPTUPLE = Array.new(9999999, 123)
Benchmark.ips do |x|
x.report("single j8r join") { SINGLE.j8r_join("", STDOUT) {|e|} }
x.report("single new join") { SINGLE.new_join("", STDOUT) {|e|} }
x.report("single std join") { SINGLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("double j8r join") { DOUBLE.j8r_join("", STDOUT) {|e|} }
x.report("double new join") { DOUBLE.new_join("", STDOUT) {|e|} }
x.report("double std join") { DOUBLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("triple j8r join") { TRIPLE.j8r_join("", STDOUT) {|e|} }
x.report("triple new join") { TRIPLE.new_join("", STDOUT) {|e|} }
x.report("triple std join") { TRIPLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("quadruple new join") { QUADRUPLE.new_join("", STDOUT) {|e|} }
x.report("quadruple j8r join") { QUADRUPLE.j8r_join("", STDOUT) {|e|} }
x.report("quadruple std join") { QUADRUPLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("quintuple j8r join") { QUINTUPLE.j8r_join("", STDOUT) {|e|} }
x.report("quintuple new join") { QUINTUPLE.new_join("", STDOUT) {|e|} }
x.report("quintuple std join") { QUINTUPLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("sextuple j8r join") { SEXTUPLE.j8r_join("", STDOUT) {|e|} }
x.report("sextuple new join") { SEXTUPLE.new_join("", STDOUT) {|e|} }
x.report("sextuple std join") { SEXTUPLE.join("", STDOUT) {|e|} }
end
Benchmark.ips do |x|
x.report("septuple j8r join") { SEPTUPLE.j8r_join("", STDOUT) {|e|} }
x.report("septuple new join") { SEPTUPLE.new_join("", STDOUT) {|e|} }
x.report("septuple std join") { SEPTUPLE.join("", STDOUT) {|e|} }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment