Guest User

Untitled

a guest
Jul 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. require_relative 'local_in_procs'
  2.  
  3. f = lambda { message }
  4. a = {:message => "Hello, world!"}
  5.  
  6. # Test the speed when using normal proc params
  7. f_control = lambda {|a| a[:message] }
  8.  
  9. def rand_letters(n, l)
  10. r = []
  11. n.times do
  12. a = ""
  13. l.times do
  14. a << ("a".."z").to_a[rand(26)]
  15. end
  16. r << a
  17. end
  18. r
  19. end
  20.  
  21. def rands(n)
  22. r = []
  23. n.times do
  24. r << rand
  25. end
  26. r
  27. end
  28.  
  29.  
  30. a_1 = {:message => "Hello, world!"}
  31. a_10 = Hash[ rand_letters(9, 8).zip(rands(9)) << [:message, "Hello, world!"] ]
  32. a_100 = Hash[ rand_letters(99, 8).zip(rands(99)) << [:message, "Hello, world!"] ]
  33. a_1000 = Hash[ rand_letters(999, 8).zip(rands(999)) << [:message, "Hello, world!"] ]
  34.  
  35. n = 1000
  36. as = [a_1, a_10, a_100, a_1000]
  37.  
  38. require 'benchmark'
  39.  
  40. Benchmark.bm(20) do |x|
  41. as.each do |a|
  42. puts "\na.size = #{a.size} ----------------------------------------------------------"
  43. x.report " in a class:" do
  44. n.times { in_class(a, f) }
  45. end
  46.  
  47. x.report " multi-use class:" do
  48. n.times { in_missing_class(a, f) }
  49. end
  50.  
  51. x.report " multi-use object:" do
  52. n.times { in_missing_object(a, f) }
  53. end
  54.  
  55. x.report " control case:" do
  56. n.times { f_control.call(a) }
  57. end
  58.  
  59. x.report " control in class:" do
  60. n.times { in_missing_class(a, f_control) }
  61. end
  62.  
  63. x.report " control in object:" do
  64. n.times { in_missing_object(a, f_control) }
  65. end
  66.  
  67. GC.start # Make sure to run each run as though freshly started
  68. end
  69. end
Add Comment
Please, Sign In to add comment