Skip to content

Instantly share code, notes, and snippets.

@PragTob
Created July 20, 2015 19:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PragTob/c843d4f5aca6113d94e9 to your computer and use it in GitHub Desktop.
Save PragTob/c843d4f5aca6113d94e9 to your computer and use it in GitHub Desktop.
meta definitions with more work
require 'benchmark/ips'
class Try
def initialize(array)
@array = array
end
define_method :meta_concat_sort do |array|
value = instance_variable_get '@' + :array.to_s
new_array = value + array
new_array.sort
end
def concat_sort(array)
new_array = @array + array
new_array.sort
end
end
BASE_ARRAY = [8, 2, 400, -4, 77]
SMALL_INPUT_ARRAY = [1, 88, -7, 2, 133]
BIG_INPUT_ARRAY = (1..100).to_a.shuffle
def do_benchmark(description, input)
puts description
Benchmark.ips do |b|
try = Try.new BASE_ARRAY
b.report('meta_concat_sort') { try.meta_concat_sort(input) }
b.report('concat_sort') { try.concat_sort(input) }
b.compare!
end
end
do_benchmark('Small input array', SMALL_INPUT_ARRAY)
do_benchmark('Big input array', BIG_INPUT_ARRAY)
@PragTob
Copy link
Author

PragTob commented Jul 20, 2015

Results on my machine and with 2.2.2:

tobi@airship ~/Desktop $ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
tobi@airship ~/Desktop $ ruby more_meta.rb 
Small input array
Calculating -------------------------------------
    meta_concat_sort    60.583k i/100ms
         concat_sort    80.618k i/100ms
-------------------------------------------------
    meta_concat_sort    842.347k (± 6.5%) i/s -      4.241M
         concat_sort      1.345M (± 4.9%) i/s -      6.772M

Comparison:
         concat_sort:  1345157.7 i/s
    meta_concat_sort:   842347.3 i/s - 1.60x slower

Big input array
Calculating -------------------------------------
    meta_concat_sort    18.438k i/100ms
         concat_sort    20.554k i/100ms
-------------------------------------------------
    meta_concat_sort    192.243k (± 6.6%) i/s -    958.776k
         concat_sort    219.196k (± 5.6%) i/s -      1.110M

Comparison:
         concat_sort:   219196.0 i/s
    meta_concat_sort:   192243.0 i/s - 1.14x slower

And jruby-1.7.21:

tobi@airship ~/Desktop $ ruby -v
jruby 1.7.21 (1.9.3p551) 2015-07-07 a741a82 on OpenJDK 64-Bit Server VM 1.7.0_79-b14 +jit [linux-amd64]
tobi@airship ~/Desktop $ ruby more_meta.rb 
Small input array
Calculating -------------------------------------
    meta_concat_sort    66.382k i/100ms
         concat_sort   172.098k i/100ms
-------------------------------------------------
    meta_concat_sort      1.379M (± 5.6%) i/s -      6.904M
         concat_sort      3.104M (± 3.9%) i/s -     15.661M

Comparison:
         concat_sort:  3104057.9 i/s
    meta_concat_sort:  1379044.5 i/s - 2.25x slower

Big input array
Calculating -------------------------------------
    meta_concat_sort    20.155k i/100ms
         concat_sort    24.273k i/100ms
-------------------------------------------------
    meta_concat_sort    234.402k (± 4.1%) i/s -      1.189M
         concat_sort    272.429k (± 6.1%) i/s -      1.359M

Comparison:
         concat_sort:   272429.4 i/s
    meta_concat_sort:   234401.5 i/s - 1.16x slower

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment