Created
December 29, 2015 14:33
-
-
Save radarek/174eb80460d828655cb8 to your computer and use it in GitHub Desktop.
Revisions
-
radarek created this gist
Dec 29, 2015 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,53 @@ def count_nodes(label) before = ObjectSpace.count_objects yield after = ObjectSpace.count_objects puts " #{label} created T_NODE: %d" % (after[:T_NODE] - before[:T_NODE]) end class MyClass include Enumerable def each yield 1 yield 2 yield 3 end end GC.disable puts "RUBY_VERSION: #{RUBY_VERSION}" def measure(title, enum) puts "------ Measuring #{title} -----" count_nodes("#all?") { enum.dup.all? { |e| e > 1 } } count_nodes("#any?") { enum.dup.any? { |e| e > 1 } } count_nodes("#collect") { enum.dup.collect { |e| e * 2 } } count_nodes("#cycle") { enum.dup.cycle(2).to_a } count_nodes("#delete_if") { enum.dup.delete_if { |e| e > 1 } } if enum.respond_to?(:delete_if) count_nodes("#detect") { enum.dup.detect { |e| e > 1 } } count_nodes("#each") { enum.dup.each { |e| e + 1 } } count_nodes("#each_index") { enum.dup.each_index { |e| e + 1 } } if enum.respond_to?(:each_index) count_nodes("#each_with_index") { enum.dup.each_with_index { |e, i| e + i } } count_nodes("#each_with_object") { enum.dup.each_with_object(123) { |e, o| e + o } } count_nodes("#fill") { enum.dup.fill { "x" } } if enum.respond_to?(:fill) count_nodes("#find") { enum.dup.find { |e| e > 1 } } count_nodes("#find_all") { enum.dup.find_all { |e| e > 1 } } count_nodes("#grep") { enum.dup.grep(/\d/) } count_nodes("#inject") { enum.dup.inject(0) { |sum, e| sum + e } } count_nodes("#map") { enum.dup.map { |e| e * 2 } } count_nodes("#none?") { enum.dup.none? { |e| e > 1 } } count_nodes("#one?") { enum.dup.one? { |e| e > 1 } } count_nodes("#reduce") { enum.dup.reduce(0) { |sum, e| sum + e } } count_nodes("#reject") { enum.dup.reject { |e| e > 1 } } count_nodes("#reverse_each") { enum.dup.reverse_each { |e| e + 1 } } count_nodes("#select") { enum.dup.select { |e| e > 1 } } puts "\n\n" end measure("Array", [1, 2, 3]) measure("MyClass (Enumerable)", MyClass.new) This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,147 @@ RUBY_VERSION: 2.1.5 ------ Measuring Array ----- #all? created T_NODE: 3 #any? created T_NODE: 3 #collect created T_NODE: 0 #cycle created T_NODE: 2 #delete_if created T_NODE: 0 #detect created T_NODE: 3 #each created T_NODE: 0 #each_index created T_NODE: 0 #each_with_index created T_NODE: 2 #each_with_object created T_NODE: 1 #fill created T_NODE: 0 #find created T_NODE: 3 #find_all created T_NODE: 1 #grep created T_NODE: 3 #inject created T_NODE: 2 #map created T_NODE: 0 #none? created T_NODE: 3 #one? created T_NODE: 3 #reduce created T_NODE: 2 #reject created T_NODE: 0 #reverse_each created T_NODE: 0 #select created T_NODE: 0 ------ Measuring MyClass (Enumerable) ----- #all? created T_NODE: 3 #any? created T_NODE: 3 #collect created T_NODE: 1 #cycle created T_NODE: 3 #detect created T_NODE: 3 #each created T_NODE: 0 #each_with_index created T_NODE: 2 #each_with_object created T_NODE: 1 #find created T_NODE: 3 #find_all created T_NODE: 1 #grep created T_NODE: 3 #inject created T_NODE: 2 #map created T_NODE: 1 #none? created T_NODE: 3 #one? created T_NODE: 3 #reduce created T_NODE: 2 #reject created T_NODE: 1 #reverse_each created T_NODE: 1 #select created T_NODE: 1 RUBY_VERSION: 2.2.4 ------ Measuring Array ----- #all? created T_NODE: 3 #any? created T_NODE: 0 #collect created T_NODE: 0 #cycle created T_NODE: 2 #delete_if created T_NODE: 0 #detect created T_NODE: 3 #each created T_NODE: 0 #each_index created T_NODE: 0 #each_with_index created T_NODE: 2 #each_with_object created T_NODE: 1 #fill created T_NODE: 0 #find created T_NODE: 3 #find_all created T_NODE: 1 #grep created T_NODE: 3 #inject created T_NODE: 2 #map created T_NODE: 0 #none? created T_NODE: 3 #one? created T_NODE: 3 #reduce created T_NODE: 2 #reject created T_NODE: 0 #reverse_each created T_NODE: 0 #select created T_NODE: 0 ------ Measuring MyClass (Enumerable) ----- #all? created T_NODE: 3 #any? created T_NODE: 3 #collect created T_NODE: 1 #cycle created T_NODE: 3 #detect created T_NODE: 3 #each created T_NODE: 0 #each_with_index created T_NODE: 2 #each_with_object created T_NODE: 1 #find created T_NODE: 3 #find_all created T_NODE: 1 #grep created T_NODE: 3 #inject created T_NODE: 2 #map created T_NODE: 1 #none? created T_NODE: 3 #one? created T_NODE: 3 #reduce created T_NODE: 2 #reject created T_NODE: 1 #reverse_each created T_NODE: 1 #select created T_NODE: 1 RUBY_VERSION: 2.3.0 ------ Measuring Array ----- #all? created T_NODE: 0 #any? created T_NODE: 0 #collect created T_NODE: 0 #cycle created T_NODE: 0 #delete_if created T_NODE: 0 #detect created T_NODE: 0 #each created T_NODE: 0 #each_index created T_NODE: 0 #each_with_index created T_NODE: 0 #each_with_object created T_NODE: 0 #fill created T_NODE: 0 #find created T_NODE: 0 #find_all created T_NODE: 0 #grep created T_NODE: 0 #inject created T_NODE: 0 #map created T_NODE: 0 #none? created T_NODE: 0 #one? created T_NODE: 0 #reduce created T_NODE: 0 #reject created T_NODE: 0 #reverse_each created T_NODE: 0 #select created T_NODE: 0 ------ Measuring MyClass (Enumerable) ----- #all? created T_NODE: 0 #any? created T_NODE: 0 #collect created T_NODE: 0 #cycle created T_NODE: 0 #detect created T_NODE: 0 #each created T_NODE: 0 #each_with_index created T_NODE: 0 #each_with_object created T_NODE: 0 #find created T_NODE: 0 #find_all created T_NODE: 0 #grep created T_NODE: 0 #inject created T_NODE: 0 #map created T_NODE: 0 #none? created T_NODE: 0 #one? created T_NODE: 0 #reduce created T_NODE: 0 #reject created T_NODE: 0 #reverse_each created T_NODE: 0 #select created T_NODE: 0