opal 0.8.1 → 0.9.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (331) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/.gitmodules +3 -3
  4. data/.jshintrc +17 -20
  5. data/.travis.yml +22 -11
  6. data/CHANGELOG.md +51 -1
  7. data/CODE_OF_CONDUCT.md +15 -0
  8. data/CONTRIBUTING.md +125 -9
  9. data/Gemfile +1 -1
  10. data/Guardfile +2 -2
  11. data/README.md +95 -29
  12. data/Rakefile +1 -1
  13. data/benchmark/benchmarks +103 -0
  14. data/benchmark/bm_array_flatten.rb +9 -0
  15. data/benchmark/bm_array_intersection_numbers.rb +7 -0
  16. data/benchmark/bm_array_intersection_objects.rb +7 -0
  17. data/benchmark/bm_array_intersection_strings.rb +7 -0
  18. data/benchmark/bm_array_join_ary.rb +9 -0
  19. data/benchmark/bm_array_minus_numbers.rb +7 -0
  20. data/benchmark/bm_array_minus_objects.rb +7 -0
  21. data/benchmark/bm_array_minus_strings.rb +7 -0
  22. data/benchmark/bm_array_union_numbers.rb +7 -0
  23. data/benchmark/bm_array_union_objects.rb +7 -0
  24. data/benchmark/bm_array_union_strings.rb +7 -0
  25. data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
  26. data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
  27. data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
  28. data/benchmark/bm_array_uniq_numbers.rb +5 -0
  29. data/benchmark/bm_array_uniq_objects.rb +5 -0
  30. data/benchmark/bm_array_uniq_strings.rb +5 -0
  31. data/benchmark/bm_dispatch_bind_table.rb +57 -0
  32. data/benchmark/bm_dispatch_code_gen.rb +65 -0
  33. data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
  34. data/benchmark/bm_dispatch_hardcoded.rb +44 -0
  35. data/benchmark/bm_dispatch_send.rb +38 -0
  36. data/benchmark/bm_dispatch_send_table.rb +57 -0
  37. data/benchmark/bm_hash_assoc_object.rb +11 -0
  38. data/benchmark/bm_hash_assoc_string.rb +9 -0
  39. data/benchmark/bm_hash_clone_object.rb +9 -0
  40. data/benchmark/bm_hash_clone_string.rb +9 -0
  41. data/benchmark/bm_hash_delete_object.rb +11 -0
  42. data/benchmark/bm_hash_delete_string.rb +9 -0
  43. data/benchmark/bm_hash_each_key_object.rb +9 -0
  44. data/benchmark/bm_hash_each_key_string.rb +9 -0
  45. data/benchmark/bm_hash_each_object.rb +9 -0
  46. data/benchmark/bm_hash_each_string.rb +9 -0
  47. data/benchmark/bm_hash_each_value_object.rb +9 -0
  48. data/benchmark/bm_hash_each_value_string.rb +9 -0
  49. data/benchmark/bm_hash_element_reference_object.rb +11 -0
  50. data/benchmark/bm_hash_element_reference_string.rb +9 -0
  51. data/benchmark/bm_hash_element_set_object.rb +5 -0
  52. data/benchmark/bm_hash_element_set_string.rb +5 -0
  53. data/benchmark/bm_hash_equal_value_object.rb +14 -0
  54. data/benchmark/bm_hash_equal_value_string.rb +11 -0
  55. data/benchmark/bm_hash_fetch_object.rb +11 -0
  56. data/benchmark/bm_hash_fetch_string.rb +9 -0
  57. data/benchmark/bm_hash_flatten_object.rb +9 -0
  58. data/benchmark/bm_hash_flatten_string.rb +9 -0
  59. data/benchmark/bm_hash_has_key_object.rb +11 -0
  60. data/benchmark/bm_hash_has_key_string.rb +9 -0
  61. data/benchmark/bm_hash_has_value_object.rb +9 -0
  62. data/benchmark/bm_hash_has_value_string.rb +9 -0
  63. data/benchmark/bm_hash_hash_object.rb +9 -0
  64. data/benchmark/bm_hash_hash_string.rb +9 -0
  65. data/benchmark/bm_hash_inspect_object.rb +9 -0
  66. data/benchmark/bm_hash_inspect_string.rb +9 -0
  67. data/benchmark/bm_hash_invert_object.rb +9 -0
  68. data/benchmark/bm_hash_invert_string.rb +9 -0
  69. data/benchmark/bm_hash_keep_if_object.rb +9 -0
  70. data/benchmark/bm_hash_keep_if_string.rb +9 -0
  71. data/benchmark/bm_hash_key_object.rb +9 -0
  72. data/benchmark/bm_hash_key_string.rb +9 -0
  73. data/benchmark/bm_hash_keys_object.rb +9 -0
  74. data/benchmark/bm_hash_keys_string.rb +9 -0
  75. data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
  76. data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
  77. data/benchmark/bm_hash_literal_object_large.rb +4 -0
  78. data/benchmark/bm_hash_literal_object_small.rb +3 -0
  79. data/benchmark/bm_hash_literal_string_large.rb +4 -0
  80. data/benchmark/bm_hash_literal_string_small.rb +3 -0
  81. data/benchmark/bm_hash_merge_object.rb +22 -0
  82. data/benchmark/bm_hash_merge_string.rb +18 -0
  83. data/benchmark/bm_hash_rassoc_object.rb +9 -0
  84. data/benchmark/bm_hash_rassoc_string.rb +9 -0
  85. data/benchmark/bm_hash_rehash_object.rb +9 -0
  86. data/benchmark/bm_hash_rehash_string.rb +9 -0
  87. data/benchmark/bm_hash_reject_bang_object.rb +9 -0
  88. data/benchmark/bm_hash_reject_bang_string.rb +9 -0
  89. data/benchmark/bm_hash_reject_object.rb +9 -0
  90. data/benchmark/bm_hash_reject_string.rb +9 -0
  91. data/benchmark/bm_hash_replace_object.rb +18 -0
  92. data/benchmark/bm_hash_replace_string.rb +14 -0
  93. data/benchmark/bm_hash_select_bang_object.rb +9 -0
  94. data/benchmark/bm_hash_select_bang_string.rb +9 -0
  95. data/benchmark/bm_hash_select_object.rb +9 -0
  96. data/benchmark/bm_hash_select_string.rb +9 -0
  97. data/benchmark/bm_hash_shift_object.rb +10 -0
  98. data/benchmark/bm_hash_shift_string.rb +10 -0
  99. data/benchmark/bm_hash_to_a_object.rb +9 -0
  100. data/benchmark/bm_hash_to_a_string.rb +9 -0
  101. data/benchmark/bm_hash_to_h_object.rb +10 -0
  102. data/benchmark/bm_hash_to_h_string.rb +10 -0
  103. data/benchmark/bm_hash_values_object.rb +9 -0
  104. data/benchmark/bm_hash_values_string.rb +9 -0
  105. data/benchmark/run.rb +48 -0
  106. data/bin/opal-mspec +1 -1
  107. data/bin/opal-repl +4 -4
  108. data/docs/compiled_ruby.md +214 -56
  109. data/docs/configuring_gems.md +2 -2
  110. data/docs/faq.md +2 -2
  111. data/docs/getting_started.md +19 -2
  112. data/docs/jquery.md +5 -5
  113. data/docs/opal_parser.md +53 -0
  114. data/docs/unsupported_features.md +2 -2
  115. data/docs/upgrading.md +22 -0
  116. data/docs/using_sprockets.md +15 -0
  117. data/examples/rack/config.ru +13 -0
  118. data/examples/sinatra/config.ru +4 -5
  119. data/lib/mspec/opal/runner.rb +54 -11
  120. data/lib/opal.rb +1 -1
  121. data/lib/opal/builder.rb +1 -1
  122. data/lib/opal/builder_processors.rb +1 -1
  123. data/lib/opal/cli.rb +17 -13
  124. data/lib/opal/cli_options.rb +1 -1
  125. data/lib/opal/compiler.rb +12 -0
  126. data/lib/opal/config.rb +4 -0
  127. data/lib/opal/nodes/arglist.rb +5 -7
  128. data/lib/opal/nodes/call.rb +6 -1
  129. data/lib/opal/nodes/call_special.rb +74 -0
  130. data/lib/opal/nodes/def.rb +35 -28
  131. data/lib/opal/nodes/definitions.rb +3 -5
  132. data/lib/opal/nodes/for.rb +13 -0
  133. data/lib/opal/nodes/helpers.rb +15 -1
  134. data/lib/opal/nodes/if.rb +5 -5
  135. data/lib/opal/nodes/iter.rb +6 -1
  136. data/lib/opal/nodes/literal.rb +1 -1
  137. data/lib/opal/nodes/logic.rb +2 -2
  138. data/lib/opal/nodes/masgn.rb +1 -2
  139. data/lib/opal/nodes/module.rb +2 -1
  140. data/lib/opal/nodes/rescue.rb +10 -1
  141. data/lib/opal/nodes/scope.rb +8 -2
  142. data/lib/opal/nodes/singleton_class.rb +1 -1
  143. data/lib/opal/nodes/top.rb +11 -0
  144. data/lib/opal/nodes/variables.rb +4 -4
  145. data/lib/opal/parser.rb +21 -3
  146. data/lib/opal/parser/grammar.rb +3115 -2961
  147. data/lib/opal/parser/grammar.y +29 -6
  148. data/lib/opal/parser/lexer.rb +18 -8
  149. data/lib/opal/sprockets.rb +85 -0
  150. data/lib/opal/sprockets/processor.rb +11 -35
  151. data/lib/opal/sprockets/server.rb +3 -15
  152. data/lib/opal/version.rb +2 -2
  153. data/opal.gemspec +4 -4
  154. data/opal/README.md +9 -0
  155. data/opal/corelib/array.rb +433 -181
  156. data/opal/corelib/basic_object.rb +48 -4
  157. data/opal/corelib/boolean.rb +15 -6
  158. data/opal/corelib/class.rb +6 -5
  159. data/opal/corelib/comparable.rb +12 -0
  160. data/opal/corelib/complex.rb +282 -0
  161. data/opal/corelib/constants.rb +9 -0
  162. data/opal/corelib/enumerable.rb +83 -34
  163. data/opal/corelib/enumerator.rb +3 -1
  164. data/opal/corelib/error.rb +49 -10
  165. data/opal/corelib/file.rb +1 -0
  166. data/opal/corelib/hash.rb +353 -577
  167. data/opal/corelib/helpers.rb +20 -0
  168. data/opal/corelib/kernel.rb +114 -59
  169. data/opal/corelib/math.rb +470 -0
  170. data/opal/corelib/method.rb +11 -2
  171. data/opal/corelib/module.rb +96 -96
  172. data/opal/corelib/{nil_class.rb → nil.rb} +20 -1
  173. data/opal/corelib/number.rb +751 -0
  174. data/opal/corelib/numeric.rb +77 -437
  175. data/opal/corelib/proc.rb +81 -1
  176. data/opal/corelib/process.rb +27 -0
  177. data/opal/corelib/rational.rb +358 -0
  178. data/opal/corelib/regexp.rb +156 -27
  179. data/opal/corelib/runtime.js +724 -335
  180. data/opal/corelib/string.rb +93 -104
  181. data/opal/corelib/string/encoding.rb +177 -0
  182. data/opal/corelib/string/inheritance.rb +2 -0
  183. data/opal/corelib/struct.rb +105 -18
  184. data/opal/corelib/time.rb +267 -146
  185. data/opal/corelib/unsupported.rb +216 -0
  186. data/opal/corelib/variables.rb +0 -6
  187. data/opal/opal.rb +8 -22
  188. data/opal/opal/base.rb +9 -0
  189. data/opal/opal/mini.rb +17 -0
  190. data/spec/README.md +1 -1
  191. data/spec/filters/bugs/array.rb +38 -136
  192. data/spec/filters/bugs/{basic_object.rb → basicobject.rb} +14 -15
  193. data/spec/filters/bugs/class.rb +6 -12
  194. data/spec/filters/bugs/complex.rb +3 -0
  195. data/spec/filters/bugs/date.rb +162 -10
  196. data/spec/filters/bugs/enumerable.rb +31 -58
  197. data/spec/filters/bugs/enumerator.rb +42 -0
  198. data/spec/filters/bugs/exception.rb +66 -10
  199. data/spec/filters/bugs/float.rb +17 -0
  200. data/spec/filters/bugs/hash.rb +11 -97
  201. data/spec/filters/bugs/inheritance.rb +5 -0
  202. data/spec/filters/bugs/integer.rb +28 -0
  203. data/spec/filters/bugs/kernel.rb +304 -12
  204. data/spec/filters/bugs/language.rb +133 -399
  205. data/spec/filters/bugs/language_opal.rb +88 -0
  206. data/spec/filters/bugs/module.rb +203 -62
  207. data/spec/filters/bugs/numeric.rb +32 -0
  208. data/spec/filters/bugs/proc.rb +39 -0
  209. data/spec/filters/bugs/range.rb +148 -0
  210. data/spec/filters/bugs/regexp.rb +168 -0
  211. data/spec/filters/bugs/set.rb +46 -3
  212. data/spec/filters/bugs/singleton.rb +1 -2
  213. data/spec/filters/bugs/string.rb +59 -90
  214. data/spec/filters/bugs/strscan.rb +80 -0
  215. data/spec/filters/bugs/struct.rb +10 -20
  216. data/spec/filters/bugs/time.rb +17 -184
  217. data/spec/filters/bugs/unboundmethod.rb +22 -0
  218. data/spec/filters/unsupported/array.rb +163 -0
  219. data/spec/filters/unsupported/basicobject.rb +14 -0
  220. data/spec/filters/unsupported/bignum.rb +46 -0
  221. data/spec/filters/unsupported/class.rb +4 -0
  222. data/spec/filters/unsupported/delegator.rb +5 -0
  223. data/spec/filters/unsupported/enumerable.rb +11 -0
  224. data/spec/filters/unsupported/enumerator.rb +8 -9
  225. data/spec/filters/unsupported/fixnum.rb +14 -0
  226. data/spec/filters/unsupported/float.rb +41 -7
  227. data/spec/filters/unsupported/freeze.rb +45 -0
  228. data/spec/filters/unsupported/hash.rb +50 -0
  229. data/spec/filters/unsupported/integer.rb +3 -0
  230. data/spec/filters/unsupported/kernel.rb +31 -0
  231. data/spec/filters/unsupported/language.rb +17 -0
  232. data/spec/filters/unsupported/matchdata.rb +30 -0
  233. data/spec/filters/unsupported/math.rb +3 -0
  234. data/spec/filters/unsupported/module.rb +5 -3
  235. data/spec/filters/unsupported/pathname.rb +3 -0
  236. data/spec/filters/unsupported/privacy.rb +136 -0
  237. data/spec/filters/unsupported/proc.rb +3 -0
  238. data/spec/filters/unsupported/regexp.rb +59 -0
  239. data/spec/filters/unsupported/set.rb +4 -0
  240. data/spec/filters/unsupported/{marshal.rb → singleton.rb} +4 -2
  241. data/spec/filters/unsupported/{mutable_strings.rb → string.rb} +456 -336
  242. data/spec/filters/unsupported/struct.rb +3 -0
  243. data/spec/filters/unsupported/symbol.rb +5 -0
  244. data/spec/filters/unsupported/taint.rb +16 -0
  245. data/spec/filters/unsupported/thread.rb +5 -0
  246. data/spec/filters/unsupported/time.rb +197 -16
  247. data/spec/lib/cli_spec.rb +14 -4
  248. data/spec/lib/compiler_spec.rb +9 -1
  249. data/spec/lib/parser/call_spec.rb +18 -0
  250. data/spec/lib/parser/not_spec.rb +2 -8
  251. data/spec/lib/sprockets_spec.rb +24 -0
  252. data/spec/opal/core/array/intersection_spec.rb +38 -0
  253. data/spec/opal/core/array/minus_spec.rb +38 -0
  254. data/spec/opal/core/array/union_spec.rb +38 -0
  255. data/spec/opal/core/array/uniq_spec.rb +49 -0
  256. data/spec/opal/core/exception_spec.rb +7 -0
  257. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
  258. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
  259. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
  260. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
  261. data/spec/opal/core/hash/internals_spec.rb +332 -0
  262. data/spec/opal/core/helpers_spec.rb +14 -0
  263. data/spec/opal/core/kernel/freeze_spec.rb +1 -1
  264. data/spec/opal/core/kernel/raise_spec.rb +13 -0
  265. data/spec/opal/core/kernel/require_tree_spec.rb +9 -0
  266. data/spec/opal/core/language/class_spec.rb +55 -0
  267. data/spec/opal/core/language/fixtures/send.rb +1 -0
  268. data/spec/opal/core/language/keyword_arguments_spec.rb +11 -0
  269. data/spec/opal/core/language/send_spec.rb +5 -0
  270. data/spec/opal/core/method/to_proc_spec.rb +28 -0
  271. data/spec/opal/core/module/name_spec.rb +0 -17
  272. data/spec/opal/core/runtime/bridged_classes_spec.rb +2 -2
  273. data/spec/opal/core/runtime/eval_spec.rb +1 -1
  274. data/spec/opal/core/runtime/method_missing_spec.rb +6 -0
  275. data/spec/opal/core/runtime_spec.rb +51 -0
  276. data/spec/opal/stdlib/js_spec.rb +66 -0
  277. data/spec/opal/stdlib/native/hash_spec.rb +36 -0
  278. data/spec/rubyspecs +152 -273
  279. data/spec/spec_helper.rb +10 -11
  280. data/stdlib/base64.rb +9 -9
  281. data/stdlib/benchmark.rb +551 -4
  282. data/stdlib/console.rb +94 -0
  283. data/stdlib/date.rb +1 -1
  284. data/stdlib/encoding.rb +1 -170
  285. data/stdlib/js.rb +56 -0
  286. data/stdlib/json.rb +9 -14
  287. data/stdlib/math.rb +1 -370
  288. data/stdlib/native.rb +133 -63
  289. data/stdlib/nodejs/file.rb +5 -0
  290. data/stdlib/nodejs/fileutils.rb +13 -6
  291. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +1 -1
  292. data/stdlib/opal-parser.rb +1 -2
  293. data/stdlib/ostruct.rb +65 -6
  294. data/stdlib/pp.rb +2 -4
  295. data/stdlib/rbconfig.rb +1 -3
  296. data/stdlib/strscan.rb +164 -28
  297. data/tasks/benchmarking.rake +88 -0
  298. data/tasks/testing.rake +181 -55
  299. data/{lib/mspec/opal/special_calls.rb → tasks/testing/mspec_special_calls.rb} +1 -1
  300. data/{lib/mspec/opal/sprockets.js → tasks/testing/phantomjs1-sprockets.js} +17 -6
  301. data/test/opal/test_keyword.rb +590 -0
  302. data/vendored-minitest/minitest.rb +2 -2
  303. data/vendored-minitest/test/unit.rb +5 -0
  304. metadata +229 -62
  305. data/benchmarks/operators.rb +0 -11
  306. data/benchmarks/prova.js.rb +0 -13
  307. data/docs/libraries.md +0 -36
  308. data/lib/mspec/opal/new.html.erb +0 -1
  309. data/lib/mspec/opal/rake_task.rb +0 -248
  310. data/opal/corelib/match_data.rb +0 -128
  311. data/spec/filters/bugs/math.rb +0 -95
  312. data/spec/filters/bugs/nil.rb +0 -7
  313. data/spec/filters/bugs/opal.rb +0 -9
  314. data/spec/filters/bugs/regular_expressions.rb +0 -41
  315. data/spec/filters/bugs/stringscanner.rb +0 -33
  316. data/spec/filters/unsupported/encoding.rb +0 -102
  317. data/spec/filters/unsupported/frozen.rb +0 -92
  318. data/spec/filters/unsupported/hash_compare_by_identity.rb +0 -16
  319. data/spec/filters/unsupported/integer_size.rb +0 -59
  320. data/spec/filters/unsupported/method_added.rb +0 -10
  321. data/spec/filters/unsupported/private_constants.rb +0 -30
  322. data/spec/filters/unsupported/private_methods.rb +0 -55
  323. data/spec/filters/unsupported/random.rb +0 -4
  324. data/spec/filters/unsupported/rational_numbers.rb +0 -4
  325. data/spec/filters/unsupported/regular_expressions.rb +0 -137
  326. data/spec/filters/unsupported/ruby_exe.rb +0 -5
  327. data/spec/filters/unsupported/symbols.rb +0 -17
  328. data/spec/filters/unsupported/tainted.rb +0 -180
  329. data/spec/filters/unsupported/trusted.rb +0 -88
  330. data/stdlib/process.rb +0 -10
  331. data/tasks/documenting.rake +0 -37
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.each{|k, v| nil}
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.each{|k, v| nil}
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.each_value{|v| nil}
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.each_value{|v| nil}
9
+ end
@@ -0,0 +1,11 @@
1
+ h = {}
2
+ a = []
3
+
4
+ 10_000.times do |i|
5
+ a[i] = Object.new
6
+ h[a[i]] = nil
7
+ end
8
+
9
+ 10_000.times do |i|
10
+ h[a[i]]
11
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 10_000.times do |i|
8
+ h[i.to_s]
9
+ end
@@ -0,0 +1,5 @@
1
+ h = {}
2
+
3
+ 100_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
@@ -0,0 +1,5 @@
1
+ h = {}
2
+
3
+ 100_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
@@ -0,0 +1,14 @@
1
+ h1 = {}
2
+ h2 = {}
3
+
4
+ a = []
5
+
6
+ 10_000.times do |i|
7
+ a[i] = Object.new
8
+ h1[a[i]] = nil
9
+ h2[a[i]] = nil
10
+ end
11
+
12
+ 1_000.times do
13
+ h1 == h2
14
+ end
@@ -0,0 +1,11 @@
1
+ h1 = {}
2
+ h2 = {}
3
+
4
+ 10_000.times do |i|
5
+ h1[i.to_s] = nil
6
+ h2[i.to_s] = nil
7
+ end
8
+
9
+ 1_000.times do
10
+ h1 == h2
11
+ end
@@ -0,0 +1,11 @@
1
+ h = {}
2
+ a = []
3
+
4
+ 10_000.times do |i|
5
+ a[i] = Object.new
6
+ h[a[i]] = nil
7
+ end
8
+
9
+ 1_000.times do |i|
10
+ h.fetch(a[i])
11
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.fetch(i.to_s)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 1_000.times do
8
+ h.flatten
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 1_000.times do
8
+ h.flatten
9
+ end
@@ -0,0 +1,11 @@
1
+ h = {}
2
+ a = []
3
+
4
+ 10_000.times do |i|
5
+ a[i] = Object.new
6
+ h[a[i]] = nil
7
+ end
8
+
9
+ 10_000.times do |i|
10
+ h.has_key?(a[i])
11
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 10_000.times do |i|
8
+ h.has_key?(i.to_s)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = i * 2
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.has_value?(i * 2)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = i * 2
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.has_value?(i * 2)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 1_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 100.times do |i|
8
+ h.hash
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 1_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 100.times do |i|
8
+ h.hash
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 100.times do
8
+ h.inspect
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 100.times do
8
+ h.inspect
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 100.times do
8
+ h.invert
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 100.times do
8
+ h.invert
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = i
5
+ end
6
+
7
+ 1_000.times do
8
+ h.keep_if{|k, v| v % 2 == 0}
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = i
5
+ end
6
+
7
+ 1_000.times do
8
+ h.keep_if{|k, v| v % 2 == 0}
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = i
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.key(i)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = i
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ h.key(i)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 5_000.times do
8
+ h.keys
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = nil
5
+ end
6
+
7
+ 5_000.times do
8
+ h.keys
9
+ end
@@ -0,0 +1,3 @@
1
+ 1000.times do
2
+ h = {Object.new => '0', '1' => '1', Object.new => '2', '3' => '3', Object.new => '4', '5' => '5', Object.new => '6', '7' => '7', Object.new => '8', '9' => '9', Object.new => '10', '11' => '11', Object.new => '12', '13' => '13', Object.new => '14', '15' => '15', Object.new => '16', '17' => '17', Object.new => '18', '19' => '19', Object.new => '20', '21' => '21', Object.new => '22', '23' => '23', Object.new => '24', '25' => '25', Object.new => '26', '27' => '27', Object.new => '28', '29' => '29', Object.new => '30', '31' => '31', Object.new => '32', '33' => '33', Object.new => '34', '35' => '35', Object.new => '36', '37' => '37', Object.new => '38', '39' => '39', Object.new => '40', '41' => '41', Object.new => '42', '43' => '43', Object.new => '44', '45' => '45', Object.new => '46', '47' => '47', Object.new => '48', '49' => '49', Object.new => '50', '51' => '51', Object.new => '52', '53' => '53', Object.new => '54', '55' => '55', Object.new => '56', '57' => '57', Object.new => '58', '59' => '59', Object.new => '60', '61' => '61', Object.new => '62', '63' => '63', Object.new => '64', '65' => '65', Object.new => '66', '67' => '67', Object.new => '68', '69' => '69', Object.new => '70', '71' => '71', Object.new => '72', '73' => '73', Object.new => '74', '75' => '75', Object.new => '76', '77' => '77', Object.new => '78', '79' => '79', Object.new => '80', '81' => '81', Object.new => '82', '83' => '83', Object.new => '84', '85' => '85', Object.new => '86', '87' => '87', Object.new => '88', '89' => '89', Object.new => '90', '91' => '91', Object.new => '92', '93' => '93', Object.new => '94', '95' => '95', Object.new => '96', '97' => '97', Object.new => '98', '99' => '99', Object.new => '100', '101' => '101', Object.new => '102', '103' => '103', Object.new => '104', '105' => '105', Object.new => '106', '107' => '107', Object.new => '108', '109' => '109', Object.new => '110', '111' => '111', Object.new => '112', '113' => '113', Object.new => '114', '115' => '115', Object.new => '116', '117' => '117', Object.new => '118', '119' => '119', Object.new => '120', '121' => '121', Object.new => '122', '123' => '123', Object.new => '124', '125' => '125', Object.new => '126', '127' => '127', Object.new => '128', '129' => '129', Object.new => '130', '131' => '131', Object.new => '132', '133' => '133', Object.new => '134', '135' => '135', Object.new => '136', '137' => '137', Object.new => '138', '139' => '139', Object.new => '140', '141' => '141', Object.new => '142', '143' => '143', Object.new => '144', '145' => '145', Object.new => '146', '147' => '147', Object.new => '148', '149' => '149', Object.new => '150', '151' => '151', Object.new => '152', '153' => '153', Object.new => '154', '155' => '155', Object.new => '156', '157' => '157', Object.new => '158', '159' => '159', Object.new => '160', '161' => '161', Object.new => '162', '163' => '163', Object.new => '164', '165' => '165', Object.new => '166', '167' => '167', Object.new => '168', '169' => '169', Object.new => '170', '171' => '171', Object.new => '172', '173' => '173', Object.new => '174', '175' => '175', Object.new => '176', '177' => '177', Object.new => '178', '179' => '179', Object.new => '180', '181' => '181', Object.new => '182', '183' => '183', Object.new => '184', '185' => '185', Object.new => '186', '187' => '187', Object.new => '188', '189' => '189', Object.new => '190', '191' => '191', Object.new => '192', '193' => '193', Object.new => '194', '195' => '195', Object.new => '196', '197' => '197', Object.new => '198', '199' => '199', Object.new => '200', '201' => '201', Object.new => '202', '203' => '203', Object.new => '204', '205' => '205', Object.new => '206', '207' => '207', Object.new => '208', '209' => '209', Object.new => '210', '211' => '211', Object.new => '212', '213' => '213', Object.new => '214', '215' => '215', Object.new => '216', '217' => '217', Object.new => '218', '219' => '219', Object.new => '220', '221' => '221', Object.new => '222', '223' => '223', Object.new => '224', '225' => '225', Object.new => '226', '227' => '227', Object.new => '228', '229' => '229', Object.new => '230', '231' => '231', Object.new => '232', '233' => '233', Object.new => '234', '235' => '235', Object.new => '236', '237' => '237', Object.new => '238', '239' => '239', Object.new => '240', '241' => '241', Object.new => '242', '243' => '243', Object.new => '244', '245' => '245', Object.new => '246', '247' => '247', Object.new => '248', '249' => '249', Object.new => '250', '251' => '251', Object.new => '252', '253' => '253', Object.new => '254', '255' => '255', Object.new => '256', '257' => '257', Object.new => '258', '259' => '259', Object.new => '260', '261' => '261', Object.new => '262', '263' => '263', Object.new => '264', '265' => '265', Object.new => '266', '267' => '267', Object.new => '268', '269' => '269', Object.new => '270', '271' => '271', Object.new => '272', '273' => '273', Object.new => '274', '275' => '275', Object.new => '276', '277' => '277', Object.new => '278', '279' => '279', Object.new => '280', '281' => '281', Object.new => '282', '283' => '283', Object.new => '284', '285' => '285', Object.new => '286', '287' => '287', Object.new => '288', '289' => '289', Object.new => '290', '291' => '291', Object.new => '292', '293' => '293', Object.new => '294', '295' => '295', Object.new => '296', '297' => '297', Object.new => '298', '299' => '299', Object.new => '300', '301' => '301', Object.new => '302', '303' => '303', Object.new => '304', '305' => '305', Object.new => '306', '307' => '307', Object.new => '308', '309' => '309', Object.new => '310', '311' => '311', Object.new => '312', '313' => '313', Object.new => '314', '315' => '315', Object.new => '316', '317' => '317', Object.new => '318', '319' => '319', Object.new => '320', '321' => '321', Object.new => '322', '323' => '323', Object.new => '324', '325' => '325', Object.new => '326', '327' => '327', Object.new => '328', '329' => '329', Object.new => '330', '331' => '331', Object.new => '332', '333' => '333', Object.new => '334', '335' => '335', Object.new => '336', '337' => '337', Object.new => '338', '339' => '339', Object.new => '340', '341' => '341', Object.new => '342', '343' => '343', Object.new => '344', '345' => '345', Object.new => '346', '347' => '347', Object.new => '348', '349' => '349', Object.new => '350', '351' => '351', Object.new => '352', '353' => '353', Object.new => '354', '355' => '355', Object.new => '356', '357' => '357', Object.new => '358', '359' => '359', Object.new => '360', '361' => '361', Object.new => '362', '363' => '363', Object.new => '364', '365' => '365', Object.new => '366', '367' => '367', Object.new => '368', '369' => '369', Object.new => '370', '371' => '371', Object.new => '372', '373' => '373', Object.new => '374', '375' => '375', Object.new => '376', '377' => '377', Object.new => '378', '379' => '379', Object.new => '380', '381' => '381', Object.new => '382', '383' => '383', Object.new => '384', '385' => '385', Object.new => '386', '387' => '387', Object.new => '388', '389' => '389', Object.new => '390', '391' => '391', Object.new => '392', '393' => '393', Object.new => '394', '395' => '395', Object.new => '396', '397' => '397', Object.new => '398', '399' => '399', Object.new => '400', '401' => '401', Object.new => '402', '403' => '403', Object.new => '404', '405' => '405', Object.new => '406', '407' => '407', Object.new => '408', '409' => '409', Object.new => '410', '411' => '411', Object.new => '412', '413' => '413', Object.new => '414', '415' => '415', Object.new => '416', '417' => '417', Object.new => '418', '419' => '419', Object.new => '420', '421' => '421', Object.new => '422', '423' => '423', Object.new => '424', '425' => '425', Object.new => '426', '427' => '427', Object.new => '428', '429' => '429', Object.new => '430', '431' => '431', Object.new => '432', '433' => '433', Object.new => '434', '435' => '435', Object.new => '436', '437' => '437', Object.new => '438', '439' => '439', Object.new => '440', '441' => '441', Object.new => '442', '443' => '443', Object.new => '444', '445' => '445', Object.new => '446', '447' => '447', Object.new => '448', '449' => '449', Object.new => '450', '451' => '451', Object.new => '452', '453' => '453', Object.new => '454', '455' => '455', Object.new => '456', '457' => '457', Object.new => '458', '459' => '459', Object.new => '460', '461' => '461', Object.new => '462', '463' => '463', Object.new => '464', '465' => '465', Object.new => '466', '467' => '467', Object.new => '468', '469' => '469', Object.new => '470', '471' => '471', Object.new => '472', '473' => '473', Object.new => '474', '475' => '475', Object.new => '476', '477' => '477', Object.new => '478', '479' => '479', Object.new => '480', '481' => '481', Object.new => '482', '483' => '483', Object.new => '484', '485' => '485', Object.new => '486', '487' => '487', Object.new => '488', '489' => '489', Object.new => '490', '491' => '491', Object.new => '492', '493' => '493', Object.new => '494', '495' => '495', Object.new => '496', '497' => '497', Object.new => '498', '499' => '499', Object.new => '500', '501' => '501', Object.new => '502', '503' => '503', Object.new => '504', '505' => '505', Object.new => '506', '507' => '507', Object.new => '508', '509' => '509', Object.new => '510', '511' => '511', Object.new => '512', '513' => '513', Object.new => '514', '515' => '515', Object.new => '516', '517' => '517', Object.new => '518', '519' => '519', Object.new => '520', '521' => '521', Object.new => '522', '523' => '523', Object.new => '524', '525' => '525', Object.new => '526', '527' => '527', Object.new => '528', '529' => '529', Object.new => '530', '531' => '531', Object.new => '532', '533' => '533', Object.new => '534', '535' => '535', Object.new => '536', '537' => '537', Object.new => '538', '539' => '539', Object.new => '540', '541' => '541', Object.new => '542', '543' => '543', Object.new => '544', '545' => '545', Object.new => '546', '547' => '547', Object.new => '548', '549' => '549', Object.new => '550', '551' => '551', Object.new => '552', '553' => '553', Object.new => '554', '555' => '555', Object.new => '556', '557' => '557', Object.new => '558', '559' => '559', Object.new => '560', '561' => '561', Object.new => '562', '563' => '563', Object.new => '564', '565' => '565', Object.new => '566', '567' => '567', Object.new => '568', '569' => '569', Object.new => '570', '571' => '571', Object.new => '572', '573' => '573', Object.new => '574', '575' => '575', Object.new => '576', '577' => '577', Object.new => '578', '579' => '579', Object.new => '580', '581' => '581', Object.new => '582', '583' => '583', Object.new => '584', '585' => '585', Object.new => '586', '587' => '587', Object.new => '588', '589' => '589', Object.new => '590', '591' => '591', Object.new => '592', '593' => '593', Object.new => '594', '595' => '595', Object.new => '596', '597' => '597', Object.new => '598', '599' => '599', Object.new => '600', '601' => '601', Object.new => '602', '603' => '603', Object.new => '604', '605' => '605', Object.new => '606', '607' => '607', Object.new => '608', '609' => '609', Object.new => '610', '611' => '611', Object.new => '612', '613' => '613', Object.new => '614', '615' => '615', Object.new => '616', '617' => '617', Object.new => '618', '619' => '619', Object.new => '620', '621' => '621', Object.new => '622', '623' => '623', Object.new => '624', '625' => '625', Object.new => '626', '627' => '627', Object.new => '628', '629' => '629', Object.new => '630', '631' => '631', Object.new => '632', '633' => '633', Object.new => '634', '635' => '635', Object.new => '636', '637' => '637', Object.new => '638', '639' => '639', Object.new => '640', '641' => '641', Object.new => '642', '643' => '643', Object.new => '644', '645' => '645', Object.new => '646', '647' => '647', Object.new => '648', '649' => '649', Object.new => '650', '651' => '651', Object.new => '652', '653' => '653', Object.new => '654', '655' => '655', Object.new => '656', '657' => '657', Object.new => '658', '659' => '659', Object.new => '660', '661' => '661', Object.new => '662', '663' => '663', Object.new => '664', '665' => '665', Object.new => '666', '667' => '667', Object.new => '668', '669' => '669', Object.new => '670', '671' => '671', Object.new => '672', '673' => '673', Object.new => '674', '675' => '675', Object.new => '676', '677' => '677', Object.new => '678', '679' => '679', Object.new => '680', '681' => '681', Object.new => '682', '683' => '683', Object.new => '684', '685' => '685', Object.new => '686', '687' => '687', Object.new => '688', '689' => '689', Object.new => '690', '691' => '691', Object.new => '692', '693' => '693', Object.new => '694', '695' => '695', Object.new => '696', '697' => '697', Object.new => '698', '699' => '699', Object.new => '700', '701' => '701', Object.new => '702', '703' => '703', Object.new => '704', '705' => '705', Object.new => '706', '707' => '707', Object.new => '708', '709' => '709', Object.new => '710', '711' => '711', Object.new => '712', '713' => '713', Object.new => '714', '715' => '715', Object.new => '716', '717' => '717', Object.new => '718', '719' => '719', Object.new => '720', '721' => '721', Object.new => '722', '723' => '723', Object.new => '724', '725' => '725', Object.new => '726', '727' => '727', Object.new => '728', '729' => '729', Object.new => '730', '731' => '731', Object.new => '732', '733' => '733', Object.new => '734', '735' => '735', Object.new => '736', '737' => '737', Object.new => '738', '739' => '739', Object.new => '740', '741' => '741', Object.new => '742', '743' => '743', Object.new => '744', '745' => '745', Object.new => '746', '747' => '747', Object.new => '748', '749' => '749', Object.new => '750', '751' => '751', Object.new => '752', '753' => '753', Object.new => '754', '755' => '755', Object.new => '756', '757' => '757', Object.new => '758', '759' => '759', Object.new => '760', '761' => '761', Object.new => '762', '763' => '763', Object.new => '764', '765' => '765', Object.new => '766', '767' => '767', Object.new => '768', '769' => '769', Object.new => '770', '771' => '771', Object.new => '772', '773' => '773', Object.new => '774', '775' => '775', Object.new => '776', '777' => '777', Object.new => '778', '779' => '779', Object.new => '780', '781' => '781', Object.new => '782', '783' => '783', Object.new => '784', '785' => '785', Object.new => '786', '787' => '787', Object.new => '788', '789' => '789', Object.new => '790', '791' => '791', Object.new => '792', '793' => '793', Object.new => '794', '795' => '795', Object.new => '796', '797' => '797', Object.new => '798', '799' => '799', Object.new => '800', '801' => '801', Object.new => '802', '803' => '803', Object.new => '804', '805' => '805', Object.new => '806', '807' => '807', Object.new => '808', '809' => '809', Object.new => '810', '811' => '811', Object.new => '812', '813' => '813', Object.new => '814', '815' => '815', Object.new => '816', '817' => '817', Object.new => '818', '819' => '819', Object.new => '820', '821' => '821', Object.new => '822', '823' => '823', Object.new => '824', '825' => '825', Object.new => '826', '827' => '827', Object.new => '828', '829' => '829', Object.new => '830', '831' => '831', Object.new => '832', '833' => '833', Object.new => '834', '835' => '835', Object.new => '836', '837' => '837', Object.new => '838', '839' => '839', Object.new => '840', '841' => '841', Object.new => '842', '843' => '843', Object.new => '844', '845' => '845', Object.new => '846', '847' => '847', Object.new => '848', '849' => '849', Object.new => '850', '851' => '851', Object.new => '852', '853' => '853', Object.new => '854', '855' => '855', Object.new => '856', '857' => '857', Object.new => '858', '859' => '859', Object.new => '860', '861' => '861', Object.new => '862', '863' => '863', Object.new => '864', '865' => '865', Object.new => '866', '867' => '867', Object.new => '868', '869' => '869', Object.new => '870', '871' => '871', Object.new => '872', '873' => '873', Object.new => '874', '875' => '875', Object.new => '876', '877' => '877', Object.new => '878', '879' => '879', Object.new => '880', '881' => '881', Object.new => '882', '883' => '883', Object.new => '884', '885' => '885', Object.new => '886', '887' => '887', Object.new => '888', '889' => '889', Object.new => '890', '891' => '891', Object.new => '892', '893' => '893', Object.new => '894', '895' => '895', Object.new => '896', '897' => '897', Object.new => '898', '899' => '899', Object.new => '900', '901' => '901', Object.new => '902', '903' => '903', Object.new => '904', '905' => '905', Object.new => '906', '907' => '907', Object.new => '908', '909' => '909', Object.new => '910', '911' => '911', Object.new => '912', '913' => '913', Object.new => '914', '915' => '915', Object.new => '916', '917' => '917', Object.new => '918', '919' => '919', Object.new => '920', '921' => '921', Object.new => '922', '923' => '923', Object.new => '924', '925' => '925', Object.new => '926', '927' => '927', Object.new => '928', '929' => '929', Object.new => '930', '931' => '931', Object.new => '932', '933' => '933', Object.new => '934', '935' => '935', Object.new => '936', '937' => '937', Object.new => '938', '939' => '939', Object.new => '940', '941' => '941', Object.new => '942', '943' => '943', Object.new => '944', '945' => '945', Object.new => '946', '947' => '947', Object.new => '948', '949' => '949', Object.new => '950', '951' => '951', Object.new => '952', '953' => '953', Object.new => '954', '955' => '955', Object.new => '956', '957' => '957', Object.new => '958', '959' => '959', Object.new => '960', '961' => '961', Object.new => '962', '963' => '963', Object.new => '964', '965' => '965', Object.new => '966', '967' => '967', Object.new => '968', '969' => '969', Object.new => '970', '971' => '971', Object.new => '972', '973' => '973', Object.new => '974', '975' => '975', Object.new => '976', '977' => '977', Object.new => '978', '979' => '979', Object.new => '980', '981' => '981', Object.new => '982', '983' => '983', Object.new => '984', '985' => '985', Object.new => '986', '987' => '987', Object.new => '988', '989' => '989', Object.new => '990', '991' => '991', Object.new => '992', '993' => '993', Object.new => '994', '995' => '995', Object.new => '996', '997' => '997', Object.new => '998', '999' => '999'}
3
+ end
@@ -0,0 +1,3 @@
1
+ 10_000.times do
2
+ h = {'a' => 'b', Object.new => 'd', 'e' => 'f', Object.new => 'h', 'i' => 'j', Object.new => 'l', 'm' => 'n', Object.new => 'p'}
3
+ end
@@ -0,0 +1,4 @@
1
+ 1000.times do
2
+ h = {Object.new => '0', Object.new => '1', Object.new => '2', Object.new => '3', Object.new => '4', Object.new => '5', Object.new => '6', Object.new => '7', Object.new => '8', Object.new => '9', Object.new => '10', Object.new => '11', Object.new => '12', Object.new => '13', Object.new => '14', Object.new => '15', Object.new => '16', Object.new => '17', Object.new => '18', Object.new => '19', Object.new => '20', Object.new => '21', Object.new => '22', Object.new => '23', Object.new => '24', Object.new => '25', Object.new => '26', Object.new => '27', Object.new => '28', Object.new => '29', Object.new => '30', Object.new => '31', Object.new => '32', Object.new => '33', Object.new => '34', Object.new => '35', Object.new => '36', Object.new => '37', Object.new => '38', Object.new => '39', Object.new => '40', Object.new => '41', Object.new => '42', Object.new => '43', Object.new => '44', Object.new => '45', Object.new => '46', Object.new => '47', Object.new => '48', Object.new => '49', Object.new => '50', Object.new => '51', Object.new => '52', Object.new => '53', Object.new => '54', Object.new => '55', Object.new => '56', Object.new => '57', Object.new => '58', Object.new => '59', Object.new => '60', Object.new => '61', Object.new => '62', Object.new => '63', Object.new => '64', Object.new => '65', Object.new => '66', Object.new => '67', Object.new => '68', Object.new => '69', Object.new => '70', Object.new => '71', Object.new => '72', Object.new => '73', Object.new => '74', Object.new => '75', Object.new => '76', Object.new => '77', Object.new => '78', Object.new => '79', Object.new => '80', Object.new => '81', Object.new => '82', Object.new => '83', Object.new => '84', Object.new => '85', Object.new => '86', Object.new => '87', Object.new => '88', Object.new => '89', Object.new => '90', Object.new => '91', Object.new => '92', Object.new => '93', Object.new => '94', Object.new => '95', Object.new => '96', Object.new => '97', Object.new => '98', Object.new => '99', Object.new => '100', Object.new => '101', Object.new => '102', Object.new => '103', Object.new => '104', Object.new => '105', Object.new => '106', Object.new => '107', Object.new => '108', Object.new => '109', Object.new => '110', Object.new => '111', Object.new => '112', Object.new => '113', Object.new => '114', Object.new => '115', Object.new => '116', Object.new => '117', Object.new => '118', Object.new => '119', Object.new => '120', Object.new => '121', Object.new => '122', Object.new => '123', Object.new => '124', Object.new => '125', Object.new => '126', Object.new => '127', Object.new => '128', Object.new => '129', Object.new => '130', Object.new => '131', Object.new => '132', Object.new => '133', Object.new => '134', Object.new => '135', Object.new => '136', Object.new => '137', Object.new => '138', Object.new => '139', Object.new => '140', Object.new => '141', Object.new => '142', Object.new => '143', Object.new => '144', Object.new => '145', Object.new => '146', Object.new => '147', Object.new => '148', Object.new => '149', Object.new => '150', Object.new => '151', Object.new => '152', Object.new => '153', Object.new => '154', Object.new => '155', Object.new => '156', Object.new => '157', Object.new => '158', Object.new => '159', Object.new => '160', Object.new => '161', Object.new => '162', Object.new => '163', Object.new => '164', Object.new => '165', Object.new => '166', Object.new => '167', Object.new => '168', Object.new => '169', Object.new => '170', Object.new => '171', Object.new => '172', Object.new => '173', Object.new => '174', Object.new => '175', Object.new => '176', Object.new => '177', Object.new => '178', Object.new => '179', Object.new => '180', Object.new => '181', Object.new => '182', Object.new => '183', Object.new => '184', Object.new => '185', Object.new => '186', Object.new => '187', Object.new => '188', Object.new => '189', Object.new => '190', Object.new => '191', Object.new => '192', Object.new => '193', Object.new => '194', Object.new => '195', Object.new => '196', Object.new => '197', Object.new => '198', Object.new => '199', Object.new => '200', Object.new => '201', Object.new => '202', Object.new => '203', Object.new => '204', Object.new => '205', Object.new => '206', Object.new => '207', Object.new => '208', Object.new => '209', Object.new => '210', Object.new => '211', Object.new => '212', Object.new => '213', Object.new => '214', Object.new => '215', Object.new => '216', Object.new => '217', Object.new => '218', Object.new => '219', Object.new => '220', Object.new => '221', Object.new => '222', Object.new => '223', Object.new => '224', Object.new => '225', Object.new => '226', Object.new => '227', Object.new => '228', Object.new => '229', Object.new => '230', Object.new => '231', Object.new => '232', Object.new => '233', Object.new => '234', Object.new => '235', Object.new => '236', Object.new => '237', Object.new => '238', Object.new => '239', Object.new => '240', Object.new => '241', Object.new => '242', Object.new => '243', Object.new => '244', Object.new => '245', Object.new => '246', Object.new => '247', Object.new => '248', Object.new => '249', Object.new => '250', Object.new => '251', Object.new => '252', Object.new => '253', Object.new => '254', Object.new => '255', Object.new => '256', Object.new => '257', Object.new => '258', Object.new => '259', Object.new => '260', Object.new => '261', Object.new => '262', Object.new => '263', Object.new => '264', Object.new => '265', Object.new => '266', Object.new => '267', Object.new => '268', Object.new => '269', Object.new => '270', Object.new => '271', Object.new => '272', Object.new => '273', Object.new => '274', Object.new => '275', Object.new => '276', Object.new => '277', Object.new => '278', Object.new => '279', Object.new => '280', Object.new => '281', Object.new => '282', Object.new => '283', Object.new => '284', Object.new => '285', Object.new => '286', Object.new => '287', Object.new => '288', Object.new => '289', Object.new => '290', Object.new => '291', Object.new => '292', Object.new => '293', Object.new => '294', Object.new => '295', Object.new => '296', Object.new => '297', Object.new => '298', Object.new => '299', Object.new => '300', Object.new => '301', Object.new => '302', Object.new => '303', Object.new => '304', Object.new => '305', Object.new => '306', Object.new => '307', Object.new => '308', Object.new => '309', Object.new => '310', Object.new => '311', Object.new => '312', Object.new => '313', Object.new => '314', Object.new => '315', Object.new => '316', Object.new => '317', Object.new => '318', Object.new => '319', Object.new => '320', Object.new => '321', Object.new => '322', Object.new => '323', Object.new => '324', Object.new => '325', Object.new => '326', Object.new => '327', Object.new => '328', Object.new => '329', Object.new => '330', Object.new => '331', Object.new => '332', Object.new => '333', Object.new => '334', Object.new => '335', Object.new => '336', Object.new => '337', Object.new => '338', Object.new => '339', Object.new => '340', Object.new => '341', Object.new => '342', Object.new => '343', Object.new => '344', Object.new => '345', Object.new => '346', Object.new => '347', Object.new => '348', Object.new => '349', Object.new => '350', Object.new => '351', Object.new => '352', Object.new => '353', Object.new => '354', Object.new => '355', Object.new => '356', Object.new => '357', Object.new => '358', Object.new => '359', Object.new => '360', Object.new => '361', Object.new => '362', Object.new => '363', Object.new => '364', Object.new => '365', Object.new => '366', Object.new => '367', Object.new => '368', Object.new => '369', Object.new => '370', Object.new => '371', Object.new => '372', Object.new => '373', Object.new => '374', Object.new => '375', Object.new => '376', Object.new => '377', Object.new => '378', Object.new => '379', Object.new => '380', Object.new => '381', Object.new => '382', Object.new => '383', Object.new => '384', Object.new => '385', Object.new => '386', Object.new => '387', Object.new => '388', Object.new => '389', Object.new => '390', Object.new => '391', Object.new => '392', Object.new => '393', Object.new => '394', Object.new => '395', Object.new => '396', Object.new => '397', Object.new => '398', Object.new => '399', Object.new => '400', Object.new => '401', Object.new => '402', Object.new => '403', Object.new => '404', Object.new => '405', Object.new => '406', Object.new => '407', Object.new => '408', Object.new => '409', Object.new => '410', Object.new => '411', Object.new => '412', Object.new => '413', Object.new => '414', Object.new => '415', Object.new => '416', Object.new => '417', Object.new => '418', Object.new => '419', Object.new => '420', Object.new => '421', Object.new => '422', Object.new => '423', Object.new => '424', Object.new => '425', Object.new => '426', Object.new => '427', Object.new => '428', Object.new => '429', Object.new => '430', Object.new => '431', Object.new => '432', Object.new => '433', Object.new => '434', Object.new => '435', Object.new => '436', Object.new => '437', Object.new => '438', Object.new => '439', Object.new => '440', Object.new => '441', Object.new => '442', Object.new => '443', Object.new => '444', Object.new => '445', Object.new => '446', Object.new => '447', Object.new => '448', Object.new => '449', Object.new => '450', Object.new => '451', Object.new => '452', Object.new => '453', Object.new => '454', Object.new => '455', Object.new => '456', Object.new => '457', Object.new => '458', Object.new => '459', Object.new => '460', Object.new => '461', Object.new => '462', Object.new => '463', Object.new => '464', Object.new => '465', Object.new => '466', Object.new => '467', Object.new => '468', Object.new => '469', Object.new => '470', Object.new => '471', Object.new => '472', Object.new => '473', Object.new => '474', Object.new => '475', Object.new => '476', Object.new => '477', Object.new => '478', Object.new => '479', Object.new => '480', Object.new => '481', Object.new => '482', Object.new => '483', Object.new => '484', Object.new => '485', Object.new => '486', Object.new => '487', Object.new => '488', Object.new => '489', Object.new => '490', Object.new => '491', Object.new => '492', Object.new => '493', Object.new => '494', Object.new => '495', Object.new => '496', Object.new => '497', Object.new => '498', Object.new => '499', Object.new => '500', Object.new => '501', Object.new => '502', Object.new => '503', Object.new => '504', Object.new => '505', Object.new => '506', Object.new => '507', Object.new => '508', Object.new => '509', Object.new => '510', Object.new => '511', Object.new => '512', Object.new => '513', Object.new => '514', Object.new => '515', Object.new => '516', Object.new => '517', Object.new => '518', Object.new => '519', Object.new => '520', Object.new => '521', Object.new => '522', Object.new => '523', Object.new => '524', Object.new => '525', Object.new => '526', Object.new => '527', Object.new => '528', Object.new => '529', Object.new => '530', Object.new => '531', Object.new => '532', Object.new => '533', Object.new => '534', Object.new => '535', Object.new => '536', Object.new => '537', Object.new => '538', Object.new => '539', Object.new => '540', Object.new => '541', Object.new => '542', Object.new => '543', Object.new => '544', Object.new => '545', Object.new => '546', Object.new => '547', Object.new => '548', Object.new => '549', Object.new => '550', Object.new => '551', Object.new => '552', Object.new => '553', Object.new => '554', Object.new => '555', Object.new => '556', Object.new => '557', Object.new => '558', Object.new => '559', Object.new => '560', Object.new => '561', Object.new => '562', Object.new => '563', Object.new => '564', Object.new => '565', Object.new => '566', Object.new => '567', Object.new => '568', Object.new => '569', Object.new => '570', Object.new => '571', Object.new => '572', Object.new => '573', Object.new => '574', Object.new => '575', Object.new => '576', Object.new => '577', Object.new => '578', Object.new => '579', Object.new => '580', Object.new => '581', Object.new => '582', Object.new => '583', Object.new => '584', Object.new => '585', Object.new => '586', Object.new => '587', Object.new => '588', Object.new => '589', Object.new => '590', Object.new => '591', Object.new => '592', Object.new => '593', Object.new => '594', Object.new => '595', Object.new => '596', Object.new => '597', Object.new => '598', Object.new => '599', Object.new => '600', Object.new => '601', Object.new => '602', Object.new => '603', Object.new => '604', Object.new => '605', Object.new => '606', Object.new => '607', Object.new => '608', Object.new => '609', Object.new => '610', Object.new => '611', Object.new => '612', Object.new => '613', Object.new => '614', Object.new => '615', Object.new => '616', Object.new => '617', Object.new => '618', Object.new => '619', Object.new => '620', Object.new => '621', Object.new => '622', Object.new => '623', Object.new => '624', Object.new => '625', Object.new => '626', Object.new => '627', Object.new => '628', Object.new => '629', Object.new => '630', Object.new => '631', Object.new => '632', Object.new => '633', Object.new => '634', Object.new => '635', Object.new => '636', Object.new => '637', Object.new => '638', Object.new => '639', Object.new => '640', Object.new => '641', Object.new => '642', Object.new => '643', Object.new => '644', Object.new => '645', Object.new => '646', Object.new => '647', Object.new => '648', Object.new => '649', Object.new => '650', Object.new => '651', Object.new => '652', Object.new => '653', Object.new => '654', Object.new => '655', Object.new => '656', Object.new => '657', Object.new => '658', Object.new => '659', Object.new => '660', Object.new => '661', Object.new => '662', Object.new => '663', Object.new => '664', Object.new => '665', Object.new => '666', Object.new => '667', Object.new => '668', Object.new => '669', Object.new => '670', Object.new => '671', Object.new => '672', Object.new => '673', Object.new => '674', Object.new => '675', Object.new => '676', Object.new => '677', Object.new => '678', Object.new => '679', Object.new => '680', Object.new => '681', Object.new => '682', Object.new => '683', Object.new => '684', Object.new => '685', Object.new => '686', Object.new => '687', Object.new => '688', Object.new => '689', Object.new => '690', Object.new => '691', Object.new => '692', Object.new => '693', Object.new => '694', Object.new => '695', Object.new => '696', Object.new => '697', Object.new => '698', Object.new => '699', Object.new => '700', Object.new => '701', Object.new => '702', Object.new => '703', Object.new => '704', Object.new => '705', Object.new => '706', Object.new => '707', Object.new => '708', Object.new => '709', Object.new => '710', Object.new => '711', Object.new => '712', Object.new => '713', Object.new => '714', Object.new => '715', Object.new => '716', Object.new => '717', Object.new => '718', Object.new => '719', Object.new => '720', Object.new => '721', Object.new => '722', Object.new => '723', Object.new => '724', Object.new => '725', Object.new => '726', Object.new => '727', Object.new => '728', Object.new => '729', Object.new => '730', Object.new => '731', Object.new => '732', Object.new => '733', Object.new => '734', Object.new => '735', Object.new => '736', Object.new => '737', Object.new => '738', Object.new => '739', Object.new => '740', Object.new => '741', Object.new => '742', Object.new => '743', Object.new => '744', Object.new => '745', Object.new => '746', Object.new => '747', Object.new => '748', Object.new => '749', Object.new => '750', Object.new => '751', Object.new => '752', Object.new => '753', Object.new => '754', Object.new => '755', Object.new => '756', Object.new => '757', Object.new => '758', Object.new => '759', Object.new => '760', Object.new => '761', Object.new => '762', Object.new => '763', Object.new => '764', Object.new => '765', Object.new => '766', Object.new => '767', Object.new => '768', Object.new => '769', Object.new => '770', Object.new => '771', Object.new => '772', Object.new => '773', Object.new => '774', Object.new => '775', Object.new => '776', Object.new => '777', Object.new => '778', Object.new => '779', Object.new => '780', Object.new => '781', Object.new => '782', Object.new => '783', Object.new => '784', Object.new => '785', Object.new => '786', Object.new => '787', Object.new => '788', Object.new => '789', Object.new => '790', Object.new => '791', Object.new => '792', Object.new => '793', Object.new => '794', Object.new => '795', Object.new => '796', Object.new => '797', Object.new => '798', Object.new => '799', Object.new => '800', Object.new => '801', Object.new => '802', Object.new => '803', Object.new => '804', Object.new => '805', Object.new => '806', Object.new => '807', Object.new => '808', Object.new => '809', Object.new => '810', Object.new => '811', Object.new => '812', Object.new => '813', Object.new => '814', Object.new => '815', Object.new => '816', Object.new => '817', Object.new => '818', Object.new => '819', Object.new => '820', Object.new => '821', Object.new => '822', Object.new => '823', Object.new => '824', Object.new => '825', Object.new => '826', Object.new => '827', Object.new => '828', Object.new => '829', Object.new => '830', Object.new => '831', Object.new => '832', Object.new => '833', Object.new => '834', Object.new => '835', Object.new => '836', Object.new => '837', Object.new => '838', Object.new => '839', Object.new => '840', Object.new => '841', Object.new => '842', Object.new => '843', Object.new => '844', Object.new => '845', Object.new => '846', Object.new => '847', Object.new => '848', Object.new => '849', Object.new => '850', Object.new => '851', Object.new => '852', Object.new => '853', Object.new => '854', Object.new => '855', Object.new => '856', Object.new => '857', Object.new => '858', Object.new => '859', Object.new => '860', Object.new => '861', Object.new => '862', Object.new => '863', Object.new => '864', Object.new => '865', Object.new => '866', Object.new => '867', Object.new => '868', Object.new => '869', Object.new => '870', Object.new => '871', Object.new => '872', Object.new => '873', Object.new => '874', Object.new => '875', Object.new => '876', Object.new => '877', Object.new => '878', Object.new => '879', Object.new => '880', Object.new => '881', Object.new => '882', Object.new => '883', Object.new => '884', Object.new => '885', Object.new => '886', Object.new => '887', Object.new => '888', Object.new => '889', Object.new => '890', Object.new => '891', Object.new => '892', Object.new => '893', Object.new => '894', Object.new => '895', Object.new => '896', Object.new => '897', Object.new => '898', Object.new => '899', Object.new => '900', Object.new => '901', Object.new => '902', Object.new => '903', Object.new => '904', Object.new => '905', Object.new => '906', Object.new => '907', Object.new => '908', Object.new => '909', Object.new => '910', Object.new => '911', Object.new => '912', Object.new => '913', Object.new => '914', Object.new => '915', Object.new => '916', Object.new => '917', Object.new => '918', Object.new => '919', Object.new => '920', Object.new => '921', Object.new => '922', Object.new => '923', Object.new => '924', Object.new => '925', Object.new => '926', Object.new => '927', Object.new => '928', Object.new => '929', Object.new => '930', Object.new => '931', Object.new => '932', Object.new => '933', Object.new => '934', Object.new => '935', Object.new => '936', Object.new => '937', Object.new => '938', Object.new => '939', Object.new => '940', Object.new => '941', Object.new => '942', Object.new => '943', Object.new => '944', Object.new => '945', Object.new => '946', Object.new => '947', Object.new => '948', Object.new => '949', Object.new => '950', Object.new => '951', Object.new => '952', Object.new => '953', Object.new => '954', Object.new => '955', Object.new => '956', Object.new => '957', Object.new => '958', Object.new => '959', Object.new => '960', Object.new => '961', Object.new => '962', Object.new => '963', Object.new => '964', Object.new => '965', Object.new => '966', Object.new => '967', Object.new => '968', Object.new => '969', Object.new => '970', Object.new => '971', Object.new => '972', Object.new => '973', Object.new => '974', Object.new => '975', Object.new => '976', Object.new => '977', Object.new => '978', Object.new => '979', Object.new => '980', Object.new => '981', Object.new => '982', Object.new => '983', Object.new => '984', Object.new => '985', Object.new => '986', Object.new => '987', Object.new => '988', Object.new => '989', Object.new => '990', Object.new => '991', Object.new => '992', Object.new => '993', Object.new => '994', Object.new => '995', Object.new => '996', Object.new => '997', Object.new => '998', Object.new => '999'}
3
+ end
4
+
@@ -0,0 +1,3 @@
1
+ 10_000.times do
2
+ h = {Object.new => 'b', Object.new => 'd', Object.new => 'f', Object.new => 'h', Object.new => 'j', Object.new => 'l', Object.new => 'n', Object.new => 'p'}
3
+ end
@@ -0,0 +1,4 @@
1
+ 10_000.times do
2
+ h = {"0"=>"0", "1"=>"1", "2"=>"2", "3"=>"3", "4"=>"4", "5"=>"5", "6"=>"6", "7"=>"7", "8"=>"8", "9"=>"9", "10"=>"10", "11"=>"11", "12"=>"12", "13"=>"13", "14"=>"14", "15"=>"15", "16"=>"16", "17"=>"17", "18"=>"18", "19"=>"19", "20"=>"20", "21"=>"21", "22"=>"22", "23"=>"23", "24"=>"24", "25"=>"25", "26"=>"26", "27"=>"27", "28"=>"28", "29"=>"29", "30"=>"30", "31"=>"31", "32"=>"32", "33"=>"33", "34"=>"34", "35"=>"35", "36"=>"36", "37"=>"37", "38"=>"38", "39"=>"39", "40"=>"40", "41"=>"41", "42"=>"42", "43"=>"43", "44"=>"44", "45"=>"45", "46"=>"46", "47"=>"47", "48"=>"48", "49"=>"49", "50"=>"50", "51"=>"51", "52"=>"52", "53"=>"53", "54"=>"54", "55"=>"55", "56"=>"56", "57"=>"57", "58"=>"58", "59"=>"59", "60"=>"60", "61"=>"61", "62"=>"62", "63"=>"63", "64"=>"64", "65"=>"65", "66"=>"66", "67"=>"67", "68"=>"68", "69"=>"69", "70"=>"70", "71"=>"71", "72"=>"72", "73"=>"73", "74"=>"74", "75"=>"75", "76"=>"76", "77"=>"77", "78"=>"78", "79"=>"79", "80"=>"80", "81"=>"81", "82"=>"82", "83"=>"83", "84"=>"84", "85"=>"85", "86"=>"86", "87"=>"87", "88"=>"88", "89"=>"89", "90"=>"90", "91"=>"91", "92"=>"92", "93"=>"93", "94"=>"94", "95"=>"95", "96"=>"96", "97"=>"97", "98"=>"98", "99"=>"99", "100"=>"100", "101"=>"101", "102"=>"102", "103"=>"103", "104"=>"104", "105"=>"105", "106"=>"106", "107"=>"107", "108"=>"108", "109"=>"109", "110"=>"110", "111"=>"111", "112"=>"112", "113"=>"113", "114"=>"114", "115"=>"115", "116"=>"116", "117"=>"117", "118"=>"118", "119"=>"119", "120"=>"120", "121"=>"121", "122"=>"122", "123"=>"123", "124"=>"124", "125"=>"125", "126"=>"126", "127"=>"127", "128"=>"128", "129"=>"129", "130"=>"130", "131"=>"131", "132"=>"132", "133"=>"133", "134"=>"134", "135"=>"135", "136"=>"136", "137"=>"137", "138"=>"138", "139"=>"139", "140"=>"140", "141"=>"141", "142"=>"142", "143"=>"143", "144"=>"144", "145"=>"145", "146"=>"146", "147"=>"147", "148"=>"148", "149"=>"149", "150"=>"150", "151"=>"151", "152"=>"152", "153"=>"153", "154"=>"154", "155"=>"155", "156"=>"156", "157"=>"157", "158"=>"158", "159"=>"159", "160"=>"160", "161"=>"161", "162"=>"162", "163"=>"163", "164"=>"164", "165"=>"165", "166"=>"166", "167"=>"167", "168"=>"168", "169"=>"169", "170"=>"170", "171"=>"171", "172"=>"172", "173"=>"173", "174"=>"174", "175"=>"175", "176"=>"176", "177"=>"177", "178"=>"178", "179"=>"179", "180"=>"180", "181"=>"181", "182"=>"182", "183"=>"183", "184"=>"184", "185"=>"185", "186"=>"186", "187"=>"187", "188"=>"188", "189"=>"189", "190"=>"190", "191"=>"191", "192"=>"192", "193"=>"193", "194"=>"194", "195"=>"195", "196"=>"196", "197"=>"197", "198"=>"198", "199"=>"199", "200"=>"200", "201"=>"201", "202"=>"202", "203"=>"203", "204"=>"204", "205"=>"205", "206"=>"206", "207"=>"207", "208"=>"208", "209"=>"209", "210"=>"210", "211"=>"211", "212"=>"212", "213"=>"213", "214"=>"214", "215"=>"215", "216"=>"216", "217"=>"217", "218"=>"218", "219"=>"219", "220"=>"220", "221"=>"221", "222"=>"222", "223"=>"223", "224"=>"224", "225"=>"225", "226"=>"226", "227"=>"227", "228"=>"228", "229"=>"229", "230"=>"230", "231"=>"231", "232"=>"232", "233"=>"233", "234"=>"234", "235"=>"235", "236"=>"236", "237"=>"237", "238"=>"238", "239"=>"239", "240"=>"240", "241"=>"241", "242"=>"242", "243"=>"243", "244"=>"244", "245"=>"245", "246"=>"246", "247"=>"247", "248"=>"248", "249"=>"249", "250"=>"250", "251"=>"251", "252"=>"252", "253"=>"253", "254"=>"254", "255"=>"255", "256"=>"256", "257"=>"257", "258"=>"258", "259"=>"259", "260"=>"260", "261"=>"261", "262"=>"262", "263"=>"263", "264"=>"264", "265"=>"265", "266"=>"266", "267"=>"267", "268"=>"268", "269"=>"269", "270"=>"270", "271"=>"271", "272"=>"272", "273"=>"273", "274"=>"274", "275"=>"275", "276"=>"276", "277"=>"277", "278"=>"278", "279"=>"279", "280"=>"280", "281"=>"281", "282"=>"282", "283"=>"283", "284"=>"284", "285"=>"285", "286"=>"286", "287"=>"287", "288"=>"288", "289"=>"289", "290"=>"290", "291"=>"291", "292"=>"292", "293"=>"293", "294"=>"294", "295"=>"295", "296"=>"296", "297"=>"297", "298"=>"298", "299"=>"299", "300"=>"300", "301"=>"301", "302"=>"302", "303"=>"303", "304"=>"304", "305"=>"305", "306"=>"306", "307"=>"307", "308"=>"308", "309"=>"309", "310"=>"310", "311"=>"311", "312"=>"312", "313"=>"313", "314"=>"314", "315"=>"315", "316"=>"316", "317"=>"317", "318"=>"318", "319"=>"319", "320"=>"320", "321"=>"321", "322"=>"322", "323"=>"323", "324"=>"324", "325"=>"325", "326"=>"326", "327"=>"327", "328"=>"328", "329"=>"329", "330"=>"330", "331"=>"331", "332"=>"332", "333"=>"333", "334"=>"334", "335"=>"335", "336"=>"336", "337"=>"337", "338"=>"338", "339"=>"339", "340"=>"340", "341"=>"341", "342"=>"342", "343"=>"343", "344"=>"344", "345"=>"345", "346"=>"346", "347"=>"347", "348"=>"348", "349"=>"349", "350"=>"350", "351"=>"351", "352"=>"352", "353"=>"353", "354"=>"354", "355"=>"355", "356"=>"356", "357"=>"357", "358"=>"358", "359"=>"359", "360"=>"360", "361"=>"361", "362"=>"362", "363"=>"363", "364"=>"364", "365"=>"365", "366"=>"366", "367"=>"367", "368"=>"368", "369"=>"369", "370"=>"370", "371"=>"371", "372"=>"372", "373"=>"373", "374"=>"374", "375"=>"375", "376"=>"376", "377"=>"377", "378"=>"378", "379"=>"379", "380"=>"380", "381"=>"381", "382"=>"382", "383"=>"383", "384"=>"384", "385"=>"385", "386"=>"386", "387"=>"387", "388"=>"388", "389"=>"389", "390"=>"390", "391"=>"391", "392"=>"392", "393"=>"393", "394"=>"394", "395"=>"395", "396"=>"396", "397"=>"397", "398"=>"398", "399"=>"399", "400"=>"400", "401"=>"401", "402"=>"402", "403"=>"403", "404"=>"404", "405"=>"405", "406"=>"406", "407"=>"407", "408"=>"408", "409"=>"409", "410"=>"410", "411"=>"411", "412"=>"412", "413"=>"413", "414"=>"414", "415"=>"415", "416"=>"416", "417"=>"417", "418"=>"418", "419"=>"419", "420"=>"420", "421"=>"421", "422"=>"422", "423"=>"423", "424"=>"424", "425"=>"425", "426"=>"426", "427"=>"427", "428"=>"428", "429"=>"429", "430"=>"430", "431"=>"431", "432"=>"432", "433"=>"433", "434"=>"434", "435"=>"435", "436"=>"436", "437"=>"437", "438"=>"438", "439"=>"439", "440"=>"440", "441"=>"441", "442"=>"442", "443"=>"443", "444"=>"444", "445"=>"445", "446"=>"446", "447"=>"447", "448"=>"448", "449"=>"449", "450"=>"450", "451"=>"451", "452"=>"452", "453"=>"453", "454"=>"454", "455"=>"455", "456"=>"456", "457"=>"457", "458"=>"458", "459"=>"459", "460"=>"460", "461"=>"461", "462"=>"462", "463"=>"463", "464"=>"464", "465"=>"465", "466"=>"466", "467"=>"467", "468"=>"468", "469"=>"469", "470"=>"470", "471"=>"471", "472"=>"472", "473"=>"473", "474"=>"474", "475"=>"475", "476"=>"476", "477"=>"477", "478"=>"478", "479"=>"479", "480"=>"480", "481"=>"481", "482"=>"482", "483"=>"483", "484"=>"484", "485"=>"485", "486"=>"486", "487"=>"487", "488"=>"488", "489"=>"489", "490"=>"490", "491"=>"491", "492"=>"492", "493"=>"493", "494"=>"494", "495"=>"495", "496"=>"496", "497"=>"497", "498"=>"498", "499"=>"499", "500"=>"500", "501"=>"501", "502"=>"502", "503"=>"503", "504"=>"504", "505"=>"505", "506"=>"506", "507"=>"507", "508"=>"508", "509"=>"509", "510"=>"510", "511"=>"511", "512"=>"512", "513"=>"513", "514"=>"514", "515"=>"515", "516"=>"516", "517"=>"517", "518"=>"518", "519"=>"519", "520"=>"520", "521"=>"521", "522"=>"522", "523"=>"523", "524"=>"524", "525"=>"525", "526"=>"526", "527"=>"527", "528"=>"528", "529"=>"529", "530"=>"530", "531"=>"531", "532"=>"532", "533"=>"533", "534"=>"534", "535"=>"535", "536"=>"536", "537"=>"537", "538"=>"538", "539"=>"539", "540"=>"540", "541"=>"541", "542"=>"542", "543"=>"543", "544"=>"544", "545"=>"545", "546"=>"546", "547"=>"547", "548"=>"548", "549"=>"549", "550"=>"550", "551"=>"551", "552"=>"552", "553"=>"553", "554"=>"554", "555"=>"555", "556"=>"556", "557"=>"557", "558"=>"558", "559"=>"559", "560"=>"560", "561"=>"561", "562"=>"562", "563"=>"563", "564"=>"564", "565"=>"565", "566"=>"566", "567"=>"567", "568"=>"568", "569"=>"569", "570"=>"570", "571"=>"571", "572"=>"572", "573"=>"573", "574"=>"574", "575"=>"575", "576"=>"576", "577"=>"577", "578"=>"578", "579"=>"579", "580"=>"580", "581"=>"581", "582"=>"582", "583"=>"583", "584"=>"584", "585"=>"585", "586"=>"586", "587"=>"587", "588"=>"588", "589"=>"589", "590"=>"590", "591"=>"591", "592"=>"592", "593"=>"593", "594"=>"594", "595"=>"595", "596"=>"596", "597"=>"597", "598"=>"598", "599"=>"599", "600"=>"600", "601"=>"601", "602"=>"602", "603"=>"603", "604"=>"604", "605"=>"605", "606"=>"606", "607"=>"607", "608"=>"608", "609"=>"609", "610"=>"610", "611"=>"611", "612"=>"612", "613"=>"613", "614"=>"614", "615"=>"615", "616"=>"616", "617"=>"617", "618"=>"618", "619"=>"619", "620"=>"620", "621"=>"621", "622"=>"622", "623"=>"623", "624"=>"624", "625"=>"625", "626"=>"626", "627"=>"627", "628"=>"628", "629"=>"629", "630"=>"630", "631"=>"631", "632"=>"632", "633"=>"633", "634"=>"634", "635"=>"635", "636"=>"636", "637"=>"637", "638"=>"638", "639"=>"639", "640"=>"640", "641"=>"641", "642"=>"642", "643"=>"643", "644"=>"644", "645"=>"645", "646"=>"646", "647"=>"647", "648"=>"648", "649"=>"649", "650"=>"650", "651"=>"651", "652"=>"652", "653"=>"653", "654"=>"654", "655"=>"655", "656"=>"656", "657"=>"657", "658"=>"658", "659"=>"659", "660"=>"660", "661"=>"661", "662"=>"662", "663"=>"663", "664"=>"664", "665"=>"665", "666"=>"666", "667"=>"667", "668"=>"668", "669"=>"669", "670"=>"670", "671"=>"671", "672"=>"672", "673"=>"673", "674"=>"674", "675"=>"675", "676"=>"676", "677"=>"677", "678"=>"678", "679"=>"679", "680"=>"680", "681"=>"681", "682"=>"682", "683"=>"683", "684"=>"684", "685"=>"685", "686"=>"686", "687"=>"687", "688"=>"688", "689"=>"689", "690"=>"690", "691"=>"691", "692"=>"692", "693"=>"693", "694"=>"694", "695"=>"695", "696"=>"696", "697"=>"697", "698"=>"698", "699"=>"699", "700"=>"700", "701"=>"701", "702"=>"702", "703"=>"703", "704"=>"704", "705"=>"705", "706"=>"706", "707"=>"707", "708"=>"708", "709"=>"709", "710"=>"710", "711"=>"711", "712"=>"712", "713"=>"713", "714"=>"714", "715"=>"715", "716"=>"716", "717"=>"717", "718"=>"718", "719"=>"719", "720"=>"720", "721"=>"721", "722"=>"722", "723"=>"723", "724"=>"724", "725"=>"725", "726"=>"726", "727"=>"727", "728"=>"728", "729"=>"729", "730"=>"730", "731"=>"731", "732"=>"732", "733"=>"733", "734"=>"734", "735"=>"735", "736"=>"736", "737"=>"737", "738"=>"738", "739"=>"739", "740"=>"740", "741"=>"741", "742"=>"742", "743"=>"743", "744"=>"744", "745"=>"745", "746"=>"746", "747"=>"747", "748"=>"748", "749"=>"749", "750"=>"750", "751"=>"751", "752"=>"752", "753"=>"753", "754"=>"754", "755"=>"755", "756"=>"756", "757"=>"757", "758"=>"758", "759"=>"759", "760"=>"760", "761"=>"761", "762"=>"762", "763"=>"763", "764"=>"764", "765"=>"765", "766"=>"766", "767"=>"767", "768"=>"768", "769"=>"769", "770"=>"770", "771"=>"771", "772"=>"772", "773"=>"773", "774"=>"774", "775"=>"775", "776"=>"776", "777"=>"777", "778"=>"778", "779"=>"779", "780"=>"780", "781"=>"781", "782"=>"782", "783"=>"783", "784"=>"784", "785"=>"785", "786"=>"786", "787"=>"787", "788"=>"788", "789"=>"789", "790"=>"790", "791"=>"791", "792"=>"792", "793"=>"793", "794"=>"794", "795"=>"795", "796"=>"796", "797"=>"797", "798"=>"798", "799"=>"799", "800"=>"800", "801"=>"801", "802"=>"802", "803"=>"803", "804"=>"804", "805"=>"805", "806"=>"806", "807"=>"807", "808"=>"808", "809"=>"809", "810"=>"810", "811"=>"811", "812"=>"812", "813"=>"813", "814"=>"814", "815"=>"815", "816"=>"816", "817"=>"817", "818"=>"818", "819"=>"819", "820"=>"820", "821"=>"821", "822"=>"822", "823"=>"823", "824"=>"824", "825"=>"825", "826"=>"826", "827"=>"827", "828"=>"828", "829"=>"829", "830"=>"830", "831"=>"831", "832"=>"832", "833"=>"833", "834"=>"834", "835"=>"835", "836"=>"836", "837"=>"837", "838"=>"838", "839"=>"839", "840"=>"840", "841"=>"841", "842"=>"842", "843"=>"843", "844"=>"844", "845"=>"845", "846"=>"846", "847"=>"847", "848"=>"848", "849"=>"849", "850"=>"850", "851"=>"851", "852"=>"852", "853"=>"853", "854"=>"854", "855"=>"855", "856"=>"856", "857"=>"857", "858"=>"858", "859"=>"859", "860"=>"860", "861"=>"861", "862"=>"862", "863"=>"863", "864"=>"864", "865"=>"865", "866"=>"866", "867"=>"867", "868"=>"868", "869"=>"869", "870"=>"870", "871"=>"871", "872"=>"872", "873"=>"873", "874"=>"874", "875"=>"875", "876"=>"876", "877"=>"877", "878"=>"878", "879"=>"879", "880"=>"880", "881"=>"881", "882"=>"882", "883"=>"883", "884"=>"884", "885"=>"885", "886"=>"886", "887"=>"887", "888"=>"888", "889"=>"889", "890"=>"890", "891"=>"891", "892"=>"892", "893"=>"893", "894"=>"894", "895"=>"895", "896"=>"896", "897"=>"897", "898"=>"898", "899"=>"899", "900"=>"900", "901"=>"901", "902"=>"902", "903"=>"903", "904"=>"904", "905"=>"905", "906"=>"906", "907"=>"907", "908"=>"908", "909"=>"909", "910"=>"910", "911"=>"911", "912"=>"912", "913"=>"913", "914"=>"914", "915"=>"915", "916"=>"916", "917"=>"917", "918"=>"918", "919"=>"919", "920"=>"920", "921"=>"921", "922"=>"922", "923"=>"923", "924"=>"924", "925"=>"925", "926"=>"926", "927"=>"927", "928"=>"928", "929"=>"929", "930"=>"930", "931"=>"931", "932"=>"932", "933"=>"933", "934"=>"934", "935"=>"935", "936"=>"936", "937"=>"937", "938"=>"938", "939"=>"939", "940"=>"940", "941"=>"941", "942"=>"942", "943"=>"943", "944"=>"944", "945"=>"945", "946"=>"946", "947"=>"947", "948"=>"948", "949"=>"949", "950"=>"950", "951"=>"951", "952"=>"952", "953"=>"953", "954"=>"954", "955"=>"955", "956"=>"956", "957"=>"957", "958"=>"958", "959"=>"959", "960"=>"960", "961"=>"961", "962"=>"962", "963"=>"963", "964"=>"964", "965"=>"965", "966"=>"966", "967"=>"967", "968"=>"968", "969"=>"969", "970"=>"970", "971"=>"971", "972"=>"972", "973"=>"973", "974"=>"974", "975"=>"975", "976"=>"976", "977"=>"977", "978"=>"978", "979"=>"979", "980"=>"980", "981"=>"981", "982"=>"982", "983"=>"983", "984"=>"984", "985"=>"985", "986"=>"986", "987"=>"987", "988"=>"988", "989"=>"989", "990"=>"990", "991"=>"991", "992"=>"992", "993"=>"993", "994"=>"994", "995"=>"995", "996"=>"996", "997"=>"997", "998"=>"998", "999"=>"999"}
3
+ end
4
+
@@ -0,0 +1,3 @@
1
+ 100_000.times do
2
+ h = {'a' => 'b', 'c' => 'd', 'e' => 'f', 'g' => 'h', 'i' => 'j', 'k' => 'l', 'm' => 'n', 'o' => 'p'}
3
+ end
@@ -0,0 +1,22 @@
1
+ h1 = {}
2
+ h2 = {}
3
+
4
+ a = []
5
+
6
+ 1.upto(5_000) do |i|
7
+ a[i] = Object.new
8
+ h1[a[i]] = nil
9
+ end
10
+
11
+ 2_501.upto(7_500) do |i|
12
+ a[i] = Object.new
13
+ h2[a[i]] = nil
14
+ end
15
+
16
+ 500.times do
17
+ h1.merge!(h2)
18
+ end
19
+
20
+ 500.times do
21
+ h2.merge!(h1){|k, v, v2| 42}
22
+ end
@@ -0,0 +1,18 @@
1
+ h1 = {}
2
+ h2 = {}
3
+
4
+ 1.upto(5_000) do |i|
5
+ h1[i.to_s] = nil
6
+ end
7
+
8
+ 2_501.upto(7_500) do |i|
9
+ h2[i.to_s] = nil
10
+ end
11
+
12
+ 500.times do
13
+ h1.merge!(h2)
14
+ end
15
+
16
+ 500.times do
17
+ h2.merge!(h1){|k, v, v2| 42}
18
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = i
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ k, v = h.rassoc(i)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[i.to_s] = i
5
+ end
6
+
7
+ 1_000.times do |i|
8
+ k, v = h.rassoc(i)
9
+ end
@@ -0,0 +1,9 @@
1
+ h = {}
2
+
3
+ 10_000.times do |i|
4
+ h[Object.new] = nil
5
+ end
6
+
7
+ 1_000.times do
8
+ h.rehash
9
+ end