Forked from jasonrclark/gist:1f71e5162ba8fbc77af7
Last active
August 29, 2015 14:17
-
-
Save PragTob/eb43aaa99e4b86b99d4e to your computer and use it in GitHub Desktop.
This file contains 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
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