Skip to content

Instantly share code, notes, and snippets.

@PragTob
Forked from jasonrclark/gist:1f71e5162ba8fbc77af7
Last active August 29, 2015 14:17
Show Gist options
  • Save PragTob/eb43aaa99e4b86b99d4e to your computer and use it in GitHub Desktop.
Save PragTob/eb43aaa99e4b86b99d4e to your computer and use it in GitHub Desktop.
require 'benchmark/ips'
class FakeDimension
def initialize
@margin_start = 10
@margin_start_relative = false
end
def relative?(result)
result.is_a?(Float) && result <= 1
end
def calculate_relative(result)
(result * 100).to_i
end
define_method :full_meta do
instance_variable_name = '@' + :full_meta.to_s
value = instance_variable_get(instance_variable_name) || 0
value = calculate_relative value if relative? value
value
end
IVAR_NAME = "@margin_start"
define_method :hoist_ivar_name do
value = instance_variable_get(IVAR_NAME) || 0
value = calculate_relative value if relative? value
value
end
define_method :direct_ivar do
value = @margin_start
value = calculate_relative value if relative? value
value
end
define_method :memoize_relative_flag do
value = @margin_start
value = calculate_relative value if @margin_start_relative
value
end
eval <<-CODE
def full_string
value = @margin_start
value = calculate_relative value if @margin_start_relative
value
end
CODE
def full_direct
value = @margin_start
value = calculate_relative value if @margin_start_relative
value
end
end
Benchmark.ips do |benchmark|
dim = FakeDimension.new
benchmark.report("full_meta") { dim.full_meta }
benchmark.report("hoist_ivar_name") { dim.hoist_ivar_name }
benchmark.report("direct_ivar") { dim.direct_ivar }
benchmark.report("memoize_relative_flag") { dim.memoize_relative_flag }
benchmark.report("full_string") { dim.full_string }
benchmark.report("full_direct") { dim.full_direct }
benchmark.compare!
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment