hamster 1.0.1.pre.rc3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (358) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hamster.rb +2 -0
  3. data/lib/hamster/associable.rb +49 -0
  4. data/lib/hamster/core_ext/enumerable.rb +3 -13
  5. data/lib/hamster/core_ext/io.rb +1 -1
  6. data/lib/hamster/core_ext/struct.rb +9 -0
  7. data/lib/hamster/deque.rb +57 -38
  8. data/lib/hamster/enumerable.rb +14 -41
  9. data/lib/hamster/experimental/mutable_queue.rb +5 -8
  10. data/lib/hamster/experimental/mutable_set.rb +6 -7
  11. data/lib/hamster/hash.rb +301 -110
  12. data/lib/hamster/immutable.rb +1 -1
  13. data/lib/hamster/list.rb +479 -194
  14. data/lib/hamster/mutable_hash.rb +6 -7
  15. data/lib/hamster/nested.rb +78 -0
  16. data/lib/hamster/read_copy_update.rb +1 -1
  17. data/lib/hamster/set.rb +198 -88
  18. data/lib/hamster/sorted_set.rb +706 -261
  19. data/lib/hamster/trie.rb +134 -15
  20. data/lib/hamster/vector.rb +571 -140
  21. data/lib/hamster/version.rb +3 -1
  22. data/spec/lib/hamster/associable/associable_spec.rb +150 -0
  23. data/spec/lib/hamster/core_ext/array_spec.rb +1 -1
  24. data/spec/lib/hamster/core_ext/enumerable_spec.rb +2 -2
  25. data/spec/lib/hamster/core_ext/io_spec.rb +1 -1
  26. data/spec/lib/hamster/deque/clear_spec.rb +3 -3
  27. data/spec/lib/hamster/deque/construction_spec.rb +8 -8
  28. data/spec/lib/hamster/deque/copying_spec.rb +1 -1
  29. data/spec/lib/hamster/deque/dequeue_spec.rb +12 -4
  30. data/spec/lib/hamster/deque/empty_spec.rb +14 -16
  31. data/spec/lib/hamster/deque/enqueue_spec.rb +4 -4
  32. data/spec/lib/hamster/deque/first_spec.rb +18 -0
  33. data/spec/lib/hamster/deque/inspect_spec.rb +1 -1
  34. data/spec/lib/hamster/deque/last_spec.rb +9 -11
  35. data/spec/lib/hamster/deque/marshal_spec.rb +6 -6
  36. data/spec/lib/hamster/deque/new_spec.rb +5 -5
  37. data/spec/lib/hamster/deque/pop_spec.rb +15 -3
  38. data/spec/lib/hamster/deque/pretty_print_spec.rb +24 -0
  39. data/spec/lib/hamster/deque/push_spec.rb +37 -0
  40. data/spec/lib/hamster/deque/shift_spec.rb +30 -0
  41. data/spec/lib/hamster/deque/size_spec.rb +1 -1
  42. data/spec/lib/hamster/deque/to_a_spec.rb +2 -2
  43. data/spec/lib/hamster/deque/to_ary_spec.rb +1 -1
  44. data/spec/lib/hamster/deque/to_list_spec.rb +3 -3
  45. data/spec/lib/hamster/deque/unshift_spec.rb +8 -3
  46. data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +3 -3
  47. data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +3 -3
  48. data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +3 -3
  49. data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +3 -3
  50. data/spec/lib/hamster/hash/all_spec.rb +32 -34
  51. data/spec/lib/hamster/hash/any_spec.rb +34 -36
  52. data/spec/lib/hamster/hash/assoc_spec.rb +3 -3
  53. data/spec/lib/hamster/hash/clear_spec.rb +4 -4
  54. data/spec/lib/hamster/hash/construction_spec.rb +8 -8
  55. data/spec/lib/hamster/hash/copying_spec.rb +1 -1
  56. data/spec/lib/hamster/hash/default_proc_spec.rb +3 -3
  57. data/spec/lib/hamster/hash/delete_spec.rb +4 -4
  58. data/spec/lib/hamster/hash/each_spec.rb +3 -3
  59. data/spec/lib/hamster/hash/each_with_index_spec.rb +1 -1
  60. data/spec/lib/hamster/hash/empty_spec.rb +13 -15
  61. data/spec/lib/hamster/hash/eql_spec.rb +4 -4
  62. data/spec/lib/hamster/hash/except_spec.rb +7 -7
  63. data/spec/lib/hamster/hash/fetch_spec.rb +10 -10
  64. data/spec/lib/hamster/hash/find_spec.rb +2 -2
  65. data/spec/lib/hamster/hash/flat_map_spec.rb +4 -4
  66. data/spec/lib/hamster/hash/flatten_spec.rb +13 -13
  67. data/spec/lib/hamster/hash/get_spec.rb +7 -7
  68. data/spec/lib/hamster/hash/has_key_spec.rb +3 -3
  69. data/spec/lib/hamster/hash/has_value_spec.rb +4 -4
  70. data/spec/lib/hamster/hash/hash_spec.rb +5 -5
  71. data/spec/lib/hamster/hash/inspect_spec.rb +2 -2
  72. data/spec/lib/hamster/hash/invert_spec.rb +6 -6
  73. data/spec/lib/hamster/hash/key_spec.rb +2 -2
  74. data/spec/lib/hamster/hash/keys_spec.rb +2 -2
  75. data/spec/lib/hamster/hash/map_spec.rb +4 -4
  76. data/spec/lib/hamster/hash/marshal_spec.rb +2 -2
  77. data/spec/lib/hamster/hash/merge_spec.rb +62 -56
  78. data/spec/lib/hamster/hash/min_max_spec.rb +9 -13
  79. data/spec/lib/hamster/hash/new_spec.rb +6 -6
  80. data/spec/lib/hamster/hash/none_spec.rb +3 -3
  81. data/spec/lib/hamster/hash/partition_spec.rb +2 -2
  82. data/spec/lib/hamster/hash/put_spec.rb +29 -7
  83. data/spec/lib/hamster/hash/reduce_spec.rb +4 -4
  84. data/spec/lib/hamster/hash/{remove_spec.rb → reject_spec.rb} +7 -7
  85. data/spec/lib/hamster/hash/reverse_each_spec.rb +1 -1
  86. data/spec/lib/hamster/hash/{filter_spec.rb → select_spec.rb} +6 -6
  87. data/spec/lib/hamster/hash/size_spec.rb +3 -3
  88. data/spec/lib/hamster/hash/slice_spec.rb +4 -4
  89. data/spec/lib/hamster/hash/sort_spec.rb +2 -2
  90. data/spec/lib/hamster/hash/store_spec.rb +29 -7
  91. data/spec/lib/hamster/hash/take_spec.rb +2 -2
  92. data/spec/lib/hamster/hash/to_a_spec.rb +1 -1
  93. data/spec/lib/hamster/hash/to_hash_spec.rb +4 -4
  94. data/spec/lib/hamster/hash/values_at_spec.rb +3 -3
  95. data/spec/lib/hamster/hash/values_spec.rb +2 -2
  96. data/spec/lib/hamster/immutable/new_spec.rb +14 -0
  97. data/spec/lib/hamster/list/add_spec.rb +16 -10
  98. data/spec/lib/hamster/list/all_spec.rb +33 -35
  99. data/spec/lib/hamster/list/any_spec.rb +29 -31
  100. data/spec/lib/hamster/list/append_spec.rb +6 -6
  101. data/spec/lib/hamster/list/at_spec.rb +1 -1
  102. data/spec/lib/hamster/list/break_spec.rb +4 -4
  103. data/spec/lib/hamster/list/cadr_spec.rb +9 -9
  104. data/spec/lib/hamster/list/chunk_spec.rb +5 -5
  105. data/spec/lib/hamster/list/clear_spec.rb +3 -3
  106. data/spec/lib/hamster/list/combination_spec.rb +3 -3
  107. data/spec/lib/hamster/list/compact_spec.rb +3 -3
  108. data/spec/lib/hamster/list/compare_spec.rb +3 -3
  109. data/spec/lib/hamster/list/cons_spec.rb +15 -17
  110. data/spec/lib/hamster/list/construction_spec.rb +20 -27
  111. data/spec/lib/hamster/list/copying_spec.rb +1 -1
  112. data/spec/lib/hamster/list/count_spec.rb +1 -1
  113. data/spec/lib/hamster/list/cycle_spec.rb +4 -4
  114. data/spec/lib/hamster/list/delete_at_spec.rb +4 -4
  115. data/spec/lib/hamster/list/drop_spec.rb +3 -3
  116. data/spec/lib/hamster/list/drop_while_spec.rb +3 -3
  117. data/spec/lib/hamster/list/each_slice_spec.rb +5 -5
  118. data/spec/lib/hamster/list/each_spec.rb +26 -28
  119. data/spec/lib/hamster/list/each_with_index_spec.rb +1 -1
  120. data/spec/lib/hamster/list/empty_spec.rb +13 -15
  121. data/spec/lib/hamster/list/eql_spec.rb +21 -21
  122. data/spec/lib/hamster/list/fill_spec.rb +8 -8
  123. data/spec/lib/hamster/list/find_all_spec.rb +3 -3
  124. data/spec/lib/hamster/list/find_index_spec.rb +1 -1
  125. data/spec/lib/hamster/list/find_spec.rb +1 -1
  126. data/spec/lib/hamster/list/flat_map_spec.rb +2 -2
  127. data/spec/lib/hamster/list/flatten_spec.rb +5 -5
  128. data/spec/lib/hamster/list/grep_spec.rb +4 -4
  129. data/spec/lib/hamster/list/group_by_spec.rb +6 -6
  130. data/spec/lib/hamster/list/hash_spec.rb +2 -2
  131. data/spec/lib/hamster/list/head_spec.rb +1 -1
  132. data/spec/lib/hamster/list/include_spec.rb +2 -2
  133. data/spec/lib/hamster/list/index_spec.rb +38 -0
  134. data/spec/lib/hamster/list/indices_spec.rb +62 -0
  135. data/spec/lib/hamster/list/init_spec.rb +3 -3
  136. data/spec/lib/hamster/list/inits_spec.rb +3 -3
  137. data/spec/lib/hamster/list/insert_spec.rb +1 -1
  138. data/spec/lib/hamster/list/inspect_spec.rb +1 -1
  139. data/spec/lib/hamster/list/intersperse_spec.rb +3 -3
  140. data/spec/lib/hamster/list/join_spec.rb +5 -5
  141. data/spec/lib/hamster/list/last_spec.rb +1 -1
  142. data/spec/lib/hamster/list/ltlt_spec.rb +20 -0
  143. data/spec/lib/hamster/list/map_spec.rb +4 -4
  144. data/spec/lib/hamster/list/maximum_spec.rb +24 -26
  145. data/spec/lib/hamster/list/merge_by_spec.rb +10 -10
  146. data/spec/lib/hamster/list/merge_spec.rb +10 -10
  147. data/spec/lib/hamster/list/minimum_spec.rb +24 -26
  148. data/spec/lib/hamster/list/multithreading_spec.rb +6 -6
  149. data/spec/lib/hamster/list/none_spec.rb +5 -5
  150. data/spec/lib/hamster/list/one_spec.rb +5 -5
  151. data/spec/lib/hamster/list/partition_spec.rb +8 -8
  152. data/spec/lib/hamster/list/permutation_spec.rb +8 -8
  153. data/spec/lib/hamster/list/pop_spec.rb +3 -3
  154. data/spec/lib/hamster/list/product_spec.rb +1 -1
  155. data/spec/lib/hamster/list/reduce_spec.rb +5 -48
  156. data/spec/lib/hamster/list/{remove_spec.rb → reject_spec.rb} +4 -4
  157. data/spec/lib/hamster/list/reverse_spec.rb +3 -3
  158. data/spec/lib/hamster/list/rotate_spec.rb +7 -7
  159. data/spec/lib/hamster/list/sample_spec.rb +1 -1
  160. data/spec/lib/hamster/list/select_spec.rb +3 -3
  161. data/spec/lib/hamster/list/size_spec.rb +1 -1
  162. data/spec/lib/hamster/list/slice_spec.rb +123 -123
  163. data/spec/lib/hamster/list/sorting_spec.rb +5 -5
  164. data/spec/lib/hamster/list/span_spec.rb +5 -5
  165. data/spec/lib/hamster/list/split_at_spec.rb +4 -4
  166. data/spec/lib/hamster/list/subsequences_spec.rb +1 -1
  167. data/spec/lib/hamster/list/sum_spec.rb +1 -1
  168. data/spec/lib/hamster/list/tail_spec.rb +4 -4
  169. data/spec/lib/hamster/list/tails_spec.rb +3 -3
  170. data/spec/lib/hamster/list/take_spec.rb +3 -3
  171. data/spec/lib/hamster/list/take_while_spec.rb +4 -4
  172. data/spec/lib/hamster/list/to_a_spec.rb +2 -2
  173. data/spec/lib/hamster/list/to_ary_spec.rb +1 -1
  174. data/spec/lib/hamster/list/to_list_spec.rb +1 -1
  175. data/spec/lib/hamster/list/to_set_spec.rb +1 -1
  176. data/spec/lib/hamster/list/union_spec.rb +4 -4
  177. data/spec/lib/hamster/list/uniq_spec.rb +23 -19
  178. data/spec/lib/hamster/list/zip_spec.rb +5 -5
  179. data/spec/lib/hamster/nested/construction_spec.rb +103 -0
  180. data/spec/lib/hamster/set/add_spec.rb +13 -11
  181. data/spec/lib/hamster/set/all_spec.rb +32 -34
  182. data/spec/lib/hamster/set/any_spec.rb +32 -34
  183. data/spec/lib/hamster/set/clear_spec.rb +3 -3
  184. data/spec/lib/hamster/set/compact_spec.rb +3 -3
  185. data/spec/lib/hamster/set/construction_spec.rb +3 -3
  186. data/spec/lib/hamster/set/copying_spec.rb +1 -1
  187. data/spec/lib/hamster/set/count_spec.rb +1 -1
  188. data/spec/lib/hamster/set/delete_spec.rb +8 -8
  189. data/spec/lib/hamster/set/difference_spec.rb +8 -8
  190. data/spec/lib/hamster/set/disjoint_spec.rb +1 -1
  191. data/spec/lib/hamster/set/each_spec.rb +2 -2
  192. data/spec/lib/hamster/set/empty_spec.rb +15 -17
  193. data/spec/lib/hamster/set/eqeq_spec.rb +3 -3
  194. data/spec/lib/hamster/set/eql_spec.rb +3 -3
  195. data/spec/lib/hamster/set/exclusion_spec.rb +7 -7
  196. data/spec/lib/hamster/set/find_spec.rb +2 -2
  197. data/spec/lib/hamster/set/first_spec.rb +29 -0
  198. data/spec/lib/hamster/set/flatten_spec.rb +9 -9
  199. data/spec/lib/hamster/set/grep_spec.rb +1 -1
  200. data/spec/lib/hamster/set/group_by_spec.rb +12 -12
  201. data/spec/lib/hamster/set/hash_spec.rb +3 -3
  202. data/spec/lib/hamster/set/include_spec.rb +8 -8
  203. data/spec/lib/hamster/set/inspect_spec.rb +2 -2
  204. data/spec/lib/hamster/set/intersect_spec.rb +1 -1
  205. data/spec/lib/hamster/set/intersection_spec.rb +13 -13
  206. data/spec/lib/hamster/set/join_spec.rb +6 -6
  207. data/spec/lib/hamster/set/map_spec.rb +7 -7
  208. data/spec/lib/hamster/set/marshal_spec.rb +2 -2
  209. data/spec/lib/hamster/set/maximum_spec.rb +22 -24
  210. data/spec/lib/hamster/set/minimum_spec.rb +22 -24
  211. data/spec/lib/hamster/set/new_spec.rb +5 -5
  212. data/spec/lib/hamster/set/none_spec.rb +5 -5
  213. data/spec/lib/hamster/set/one_spec.rb +6 -6
  214. data/spec/lib/hamster/set/partition_spec.rb +5 -5
  215. data/spec/lib/hamster/set/product_spec.rb +2 -2
  216. data/spec/lib/hamster/set/reduce_spec.rb +5 -5
  217. data/spec/lib/hamster/set/{remove_spec.rb → reject_spec.rb} +6 -6
  218. data/spec/lib/hamster/set/reverse_each_spec.rb +1 -1
  219. data/spec/lib/hamster/set/sample_spec.rb +1 -1
  220. data/spec/lib/hamster/set/{filter_spec.rb → select_spec.rb} +11 -11
  221. data/spec/lib/hamster/set/size_spec.rb +1 -1
  222. data/spec/lib/hamster/set/sorting_spec.rb +16 -5
  223. data/spec/lib/hamster/set/subset_spec.rb +2 -2
  224. data/spec/lib/hamster/set/sum_spec.rb +2 -2
  225. data/spec/lib/hamster/set/superset_spec.rb +2 -2
  226. data/spec/lib/hamster/set/to_a_spec.rb +2 -2
  227. data/spec/lib/hamster/set/to_list_spec.rb +2 -2
  228. data/spec/lib/hamster/set/to_set_spec.rb +1 -1
  229. data/spec/lib/hamster/set/union_spec.rb +23 -14
  230. data/spec/lib/hamster/sorted_set/above_spec.rb +11 -11
  231. data/spec/lib/hamster/sorted_set/add_spec.rb +8 -8
  232. data/spec/lib/hamster/sorted_set/at_spec.rb +1 -1
  233. data/spec/lib/hamster/sorted_set/below_spec.rb +11 -11
  234. data/spec/lib/hamster/sorted_set/between_spec.rb +11 -11
  235. data/spec/lib/hamster/sorted_set/clear_spec.rb +11 -2
  236. data/spec/lib/hamster/sorted_set/copying_spec.rb +21 -0
  237. data/spec/lib/hamster/sorted_set/delete_at_spec.rb +4 -4
  238. data/spec/lib/hamster/sorted_set/delete_spec.rb +21 -12
  239. data/spec/lib/hamster/sorted_set/difference_spec.rb +2 -2
  240. data/spec/lib/hamster/sorted_set/disjoint_spec.rb +1 -1
  241. data/spec/lib/hamster/sorted_set/drop_spec.rb +30 -3
  242. data/spec/lib/hamster/sorted_set/drop_while_spec.rb +4 -4
  243. data/spec/lib/hamster/sorted_set/each_spec.rb +16 -18
  244. data/spec/lib/hamster/sorted_set/empty_spec.rb +12 -14
  245. data/spec/lib/hamster/sorted_set/eql_spec.rb +5 -5
  246. data/spec/lib/hamster/sorted_set/exclusion_spec.rb +1 -1
  247. data/spec/lib/hamster/sorted_set/fetch_spec.rb +1 -1
  248. data/spec/lib/hamster/sorted_set/find_index_spec.rb +10 -2
  249. data/spec/lib/hamster/sorted_set/first_spec.rb +10 -12
  250. data/spec/lib/hamster/sorted_set/from_spec.rb +11 -11
  251. data/spec/lib/hamster/sorted_set/group_by_spec.rb +10 -10
  252. data/spec/lib/hamster/sorted_set/include_spec.rb +2 -2
  253. data/spec/lib/hamster/sorted_set/inspect_spec.rb +1 -1
  254. data/spec/lib/hamster/sorted_set/intersect_spec.rb +1 -1
  255. data/spec/lib/hamster/sorted_set/intersection_spec.rb +3 -3
  256. data/spec/lib/hamster/sorted_set/last_spec.rb +1 -1
  257. data/spec/lib/hamster/sorted_set/map_spec.rb +13 -5
  258. data/spec/lib/hamster/sorted_set/marshal_spec.rb +3 -3
  259. data/spec/lib/hamster/sorted_set/maximum_spec.rb +37 -0
  260. data/spec/lib/hamster/sorted_set/minimum_spec.rb +11 -13
  261. data/spec/lib/hamster/sorted_set/new_spec.rb +23 -3
  262. data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +2 -2
  263. data/spec/lib/hamster/sorted_set/{filter_spec.rb → select_spec.rb} +10 -10
  264. data/spec/lib/hamster/sorted_set/size_spec.rb +1 -1
  265. data/spec/lib/hamster/sorted_set/slice_spec.rb +158 -142
  266. data/spec/lib/hamster/sorted_set/sorting_spec.rb +3 -3
  267. data/spec/lib/hamster/sorted_set/subset_spec.rb +2 -2
  268. data/spec/lib/hamster/sorted_set/superset_spec.rb +2 -2
  269. data/spec/lib/hamster/sorted_set/take_spec.rb +32 -3
  270. data/spec/lib/hamster/sorted_set/take_while_spec.rb +4 -4
  271. data/spec/lib/hamster/sorted_set/to_set_spec.rb +1 -1
  272. data/spec/lib/hamster/sorted_set/union_spec.rb +2 -2
  273. data/spec/lib/hamster/sorted_set/up_to_spec.rb +12 -11
  274. data/spec/lib/hamster/sorted_set/values_at_spec.rb +6 -6
  275. data/spec/lib/hamster/vector/add_spec.rb +3 -3
  276. data/spec/lib/hamster/vector/any_spec.rb +1 -1
  277. data/spec/lib/hamster/vector/assoc_spec.rb +11 -1
  278. data/spec/lib/hamster/vector/bsearch_spec.rb +10 -2
  279. data/spec/lib/hamster/vector/clear_spec.rb +3 -3
  280. data/spec/lib/hamster/vector/combination_spec.rb +4 -4
  281. data/spec/lib/hamster/vector/compact_spec.rb +2 -2
  282. data/spec/lib/hamster/vector/compare_spec.rb +3 -3
  283. data/spec/lib/hamster/vector/concat_spec.rb +2 -2
  284. data/spec/lib/hamster/vector/copying_spec.rb +1 -1
  285. data/spec/lib/hamster/vector/delete_at_spec.rb +8 -8
  286. data/spec/lib/hamster/vector/delete_spec.rb +2 -2
  287. data/spec/lib/hamster/vector/drop_spec.rb +10 -3
  288. data/spec/lib/hamster/vector/drop_while_spec.rb +5 -5
  289. data/spec/lib/hamster/vector/each_index_spec.rb +2 -2
  290. data/spec/lib/hamster/vector/each_spec.rb +27 -29
  291. data/spec/lib/hamster/vector/each_with_index_spec.rb +2 -2
  292. data/spec/lib/hamster/vector/empty_spec.rb +11 -13
  293. data/spec/lib/hamster/vector/eql_spec.rb +6 -6
  294. data/spec/lib/hamster/vector/fetch_spec.rb +1 -1
  295. data/spec/lib/hamster/vector/fill_spec.rb +9 -9
  296. data/spec/lib/hamster/vector/first_spec.rb +10 -12
  297. data/spec/lib/hamster/vector/flat_map_spec.rb +51 -0
  298. data/spec/lib/hamster/vector/flatten_spec.rb +15 -0
  299. data/spec/lib/hamster/vector/get_spec.rb +4 -4
  300. data/spec/lib/hamster/vector/group_by_spec.rb +12 -12
  301. data/spec/lib/hamster/vector/include_spec.rb +2 -2
  302. data/spec/lib/hamster/vector/insert_spec.rb +2 -2
  303. data/spec/lib/hamster/vector/inspect_spec.rb +1 -1
  304. data/spec/lib/hamster/vector/join_spec.rb +5 -5
  305. data/spec/lib/hamster/vector/last_spec.rb +1 -1
  306. data/spec/lib/hamster/vector/length_spec.rb +1 -1
  307. data/spec/lib/hamster/vector/ltlt_spec.rb +2 -2
  308. data/spec/lib/hamster/vector/map_spec.rb +5 -5
  309. data/spec/lib/hamster/vector/marshal_spec.rb +2 -2
  310. data/spec/lib/hamster/vector/maximum_spec.rb +20 -22
  311. data/spec/lib/hamster/vector/minimum_spec.rb +20 -22
  312. data/spec/lib/hamster/vector/multiply_spec.rb +4 -4
  313. data/spec/lib/hamster/vector/partition_spec.rb +5 -5
  314. data/spec/lib/hamster/vector/permutation_spec.rb +4 -4
  315. data/spec/lib/hamster/vector/pop_spec.rb +3 -3
  316. data/spec/lib/hamster/vector/product_spec.rb +10 -10
  317. data/spec/lib/hamster/vector/put_spec.rb +175 -0
  318. data/spec/lib/hamster/vector/reduce_spec.rb +5 -57
  319. data/spec/lib/hamster/vector/{remove_spec.rb → reject_spec.rb} +4 -4
  320. data/spec/lib/hamster/vector/repeated_combination_spec.rb +4 -4
  321. data/spec/lib/hamster/vector/repeated_permutation_spec.rb +6 -6
  322. data/spec/lib/hamster/vector/reverse_each_spec.rb +1 -1
  323. data/spec/lib/hamster/vector/reverse_spec.rb +1 -1
  324. data/spec/lib/hamster/vector/rindex_spec.rb +1 -1
  325. data/spec/lib/hamster/vector/rotate_spec.rb +9 -9
  326. data/spec/lib/hamster/vector/sample_spec.rb +1 -1
  327. data/spec/lib/hamster/vector/{filter_spec.rb → select_spec.rb} +8 -8
  328. data/spec/lib/hamster/vector/set_spec.rb +12 -141
  329. data/spec/lib/hamster/vector/shift_spec.rb +3 -3
  330. data/spec/lib/hamster/vector/shuffle_spec.rb +2 -2
  331. data/spec/lib/hamster/vector/slice_spec.rb +137 -137
  332. data/spec/lib/hamster/vector/sorting_spec.rb +5 -5
  333. data/spec/lib/hamster/vector/sum_spec.rb +1 -1
  334. data/spec/lib/hamster/vector/take_spec.rb +17 -3
  335. data/spec/lib/hamster/vector/take_while_spec.rb +4 -4
  336. data/spec/lib/hamster/vector/to_a_spec.rb +1 -1
  337. data/spec/lib/hamster/vector/to_ary_spec.rb +1 -1
  338. data/spec/lib/hamster/vector/to_list_spec.rb +2 -1
  339. data/spec/lib/hamster/vector/to_set_spec.rb +1 -1
  340. data/spec/lib/hamster/vector/uniq_spec.rb +27 -6
  341. data/spec/lib/hamster/vector/unshift_spec.rb +3 -3
  342. data/spec/lib/hamster/vector/values_at_spec.rb +6 -6
  343. data/spec/lib/hamster/vector/zip_spec.rb +2 -2
  344. data/spec/lib/load_spec.rb +42 -0
  345. data/spec/spec_helper.rb +25 -0
  346. metadata +85 -48
  347. data/spec/lib/hamster/deque/head_spec.rb +0 -20
  348. data/spec/lib/hamster/hash/uniq_spec.rb +0 -14
  349. data/spec/lib/hamster/list/elem_index_spec.rb +0 -36
  350. data/spec/lib/hamster/list/elem_indices_spec.rb +0 -31
  351. data/spec/lib/hamster/list/filter_spec.rb +0 -71
  352. data/spec/lib/hamster/list/find_indices_spec.rb +0 -37
  353. data/spec/lib/hamster/set/foreach_spec.rb +0 -40
  354. data/spec/lib/hamster/set/head_spec.rb +0 -31
  355. data/spec/lib/hamster/set/uniq_spec.rb +0 -14
  356. data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
  357. data/spec/lib/hamster/vector/exist_spec.rb +0 -70
  358. data/spec/lib/hamster/vector/exists_spec.rb +0 -70
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash(a: 3, b: 2, c: 1) }
5
+ let(:hash) { H[a: 3, b: 2, c: 1] }
6
6
 
7
7
  describe "#assoc" do
8
8
  it "searches for a key/val pair with a given key" do
@@ -18,7 +18,7 @@ describe Hamster::Hash do
18
18
  end
19
19
 
20
20
  it "returns nil even if there is a default" do
21
- Hamster::Hash.new(a: 1, b: 2) { fail }.assoc(:c).should be_nil
21
+ H.new(a: 1, b: 2) { fail }.assoc(:c).should be_nil
22
22
  end
23
23
 
24
24
  it "uses #== to compare keys with provided object" do
@@ -41,7 +41,7 @@ describe Hamster::Hash do
41
41
  end
42
42
 
43
43
  it "returns nil even if there is a default" do
44
- Hamster::Hash.new(a: 1, b: 2) { fail }.rassoc(3).should be_nil
44
+ H.new(a: 1, b: 2) { fail }.rassoc(3).should be_nil
45
45
  end
46
46
 
47
47
  it "uses #== to compare values with provided object" do
@@ -9,23 +9,23 @@ describe Hamster::Hash do
9
9
  ["A" => "aye", "B" => "bee", "C" => "see"],
10
10
  ].each do |values|
11
11
  context "on #{values}" do
12
- let(:original) { Hamster.hash(*values) }
12
+ let(:original) { H[*values] }
13
13
  let(:result) { original.clear }
14
14
 
15
15
  it "preserves the original" do
16
16
  result
17
- original.should eql(Hamster.hash(*values))
17
+ original.should eql(H[*values])
18
18
  end
19
19
 
20
20
  it "returns an empty hash" do
21
- result.should equal(Hamster.hash)
21
+ result.should equal(H.empty)
22
22
  result.should be_empty
23
23
  end
24
24
  end
25
25
  end
26
26
 
27
27
  it "maintains the default Proc, if there is one" do
28
- hash = Hamster::Hash.new(a: 1) { 1 }
28
+ hash = H.new(a: 1) { 1 }
29
29
  hash.clear[:b].should == 1
30
30
  hash.clear[:c].should == 1
31
31
  hash.clear.default_proc.should_not be_nil
@@ -5,31 +5,31 @@ describe Hamster::Hash do
5
5
  describe ".hash" do
6
6
  context "with nothing" do
7
7
  it "returns the canonical empty hash" do
8
- Hamster.hash.should be_empty
9
- Hamster.hash.should equal(Hamster::EmptyHash)
8
+ H.empty.should be_empty
9
+ H.empty.should equal(Hamster::EmptyHash)
10
10
  end
11
11
  end
12
12
 
13
13
  context "with an implicit hash" do
14
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
14
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
15
15
 
16
16
  it "is equivalent to repeatedly using #put" do
17
- hash.should eql(Hamster.hash.put("A", "aye").put("B", "bee").put("C", "see"))
17
+ hash.should eql(H.empty.put("A", "aye").put("B", "bee").put("C", "see"))
18
18
  hash.size.should == 3
19
19
  end
20
20
  end
21
21
 
22
22
  context "with an array of pairs" do
23
- let(:hash) { Hamster.hash([[:a, 1], [:b, 2]]) }
23
+ let(:hash) { H[[[:a, 1], [:b, 2]]] }
24
24
 
25
25
  it "initializes a new Hash" do
26
- hash.should eql(Hamster.hash(a: 1, b: 2))
26
+ hash.should eql(H[a: 1, b: 2])
27
27
  end
28
28
  end
29
29
 
30
30
  context "with a Hamster::Hash" do
31
- let(:hash) { Hamster.hash(a: 1, b: 2) }
32
- let(:other) { Hamster.hash(hash) }
31
+ let(:hash) { H[a: 1, b: 2] }
32
+ let(:other) { H[hash] }
33
33
 
34
34
  it "initializes an equivalent Hash" do
35
35
  hash.should eql(other)
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
5
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
6
 
7
7
  [:dup, :clone].each do |method|
8
8
  describe "##{method}" do
@@ -3,7 +3,7 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#default_proc" do
6
- let(:hash) { Hamster::Hash.new(1 => 2, 2 => 4) { |k| k * 2 } }
6
+ let(:hash) { H.new(1 => 2, 2 => 4) { |k| k * 2 } }
7
7
 
8
8
  it "returns the default block given when the Hash was created" do
9
9
  hash.default_proc.class.should be(Proc)
@@ -11,7 +11,7 @@ describe Hamster::Hash do
11
11
  end
12
12
 
13
13
  it "returns nil if no default block was given" do
14
- Hamster.hash.default_proc.should be_nil
14
+ H.empty.default_proc.should be_nil
15
15
  end
16
16
 
17
17
  context "after a key/val pair are inserted" do
@@ -24,7 +24,7 @@ describe Hamster::Hash do
24
24
 
25
25
  context "after all key/val pairs are filtered out" do
26
26
  it "doesn't change" do
27
- other = hash.remove { true }
27
+ other = hash.reject { true }
28
28
  other.default_proc.should be(hash.default_proc)
29
29
  other.default_proc.call(4).should == 8
30
30
  end
@@ -3,17 +3,17 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#delete" do
6
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
6
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
7
7
 
8
8
  context "with an existing key" do
9
9
  let(:result) { hash.delete("B") }
10
10
 
11
11
  it "preserves the original" do
12
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see"))
12
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
13
13
  end
14
14
 
15
15
  it "returns a copy with the remaining key/value pairs" do
16
- result.should eql(Hamster.hash("A" => "aye", "C" => "see"))
16
+ result.should eql(H["A" => "aye", "C" => "see"])
17
17
  end
18
18
  end
19
19
 
@@ -21,7 +21,7 @@ describe Hamster::Hash do
21
21
  let(:result) { hash.delete("D") }
22
22
 
23
23
  it "preserves the original values" do
24
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see"))
24
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
25
25
  end
26
26
 
27
27
  it "returns self" do
@@ -2,9 +2,9 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
5
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
6
 
7
- [:each, :foreach, :each_pair].each do |method|
7
+ [:each, :each_pair].each do |method|
8
8
  describe "##{method}" do
9
9
  context "with a block (internal iteration)" do
10
10
  it "returns self" do
@@ -23,7 +23,7 @@ describe Hamster::Hash do
23
23
 
24
24
  it "yields both of a pair of colliding keys" do
25
25
  yielded = []
26
- hash = Hamster.hash(DeterministicHash.new('a', 1) => 1, DeterministicHash.new('b', 1) => 1)
26
+ hash = H[DeterministicHash.new('a', 1) => 1, DeterministicHash.new('b', 1) => 1]
27
27
  hash.each { |k,v| yielded << k }
28
28
  yielded.size.should == 2
29
29
  yielded.map { |x| x.value }.sort.should == ['a', 'b']
@@ -3,7 +3,7 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#each_with_index" do
6
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
6
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
7
7
 
8
8
  describe "with a block (internal iteration)" do
9
9
  it "returns self" do
@@ -2,28 +2,26 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- [:empty?, :null?].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], true],
9
- [["A" => "aye"], false],
10
- [["A" => "aye", "B" => "bee", "C" => "see"], false],
11
- ].each do |pairs, result|
12
- it "returns #{result} for #{pairs.inspect}" do
13
- Hamster.hash(*pairs).send(method).should == result
14
- end
5
+ describe "#empty?" do
6
+ [
7
+ [[], true],
8
+ [["A" => "aye"], false],
9
+ [["A" => "aye", "B" => "bee", "C" => "see"], false],
10
+ ].each do |pairs, result|
11
+ it "returns #{result} for #{pairs.inspect}" do
12
+ H[*pairs].empty?.should == result
15
13
  end
14
+ end
16
15
 
17
- it "returns true for empty hashes which have a default block" do
18
- Hamster::Hash.new { 'default' }.empty?.should == true
19
- end
16
+ it "returns true for empty hashes which have a default block" do
17
+ H.new { 'default' }.empty?.should == true
20
18
  end
21
19
  end
22
20
 
23
21
  describe ".empty" do
24
22
  it "returns the canonical empty Hash" do
25
- Hamster::Hash.empty.should be_empty
26
- Hamster::Hash.empty.should be(Hamster::EmptyHash)
23
+ H.empty.should be_empty
24
+ H.empty.should be(Hamster::EmptyHash)
27
25
  end
28
26
 
29
27
  context "from a subclass" do
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
5
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
6
 
7
7
  describe "#eql?" do
8
8
  it "returns false when comparing with a standard hash" do
@@ -51,11 +51,11 @@ describe Hamster::Hash do
51
51
  ].each do |a, b, expected|
52
52
  describe "returns #{expected.inspect}" do
53
53
  it "for #{a.inspect} and #{b.inspect}" do
54
- Hamster.hash(a).send(method, Hamster.hash(b)).should == expected
54
+ H[a].send(method, H[b]).should == expected
55
55
  end
56
56
 
57
57
  it "for #{b.inspect} and #{a.inspect}" do
58
- Hamster.hash(b).send(method, Hamster.hash(a)).should == expected
58
+ H[b].send(method, H[a]).should == expected
59
59
  end
60
60
  end
61
61
  end
@@ -63,7 +63,7 @@ describe Hamster::Hash do
63
63
  end
64
64
 
65
65
  it "returns true on a large hash which is modified and then modified back again" do
66
- hash = Hamster::Hash.new((1..1000).zip(2..1001))
66
+ hash = H.new((1..1000).zip(2..1001))
67
67
  hash.put('a', 1).delete('a').should == hash
68
68
  hash.put('b', 2).delete('b').should eql(hash)
69
69
  end
@@ -3,33 +3,33 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#except" do
6
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
6
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
7
7
 
8
8
  context "with only keys that the Hash has" do
9
9
  it "returns a Hash without those values" do
10
- hash.except("B", nil).should eql(Hamster.hash("A" => "aye", "C" => "see"))
10
+ hash.except("B", nil).should eql(H["A" => "aye", "C" => "see"])
11
11
  end
12
12
 
13
13
  it "doesn't change the original Hash" do
14
14
  hash.except("B", nil)
15
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
15
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
16
16
  end
17
17
  end
18
18
 
19
19
  context "with keys that the Hash doesn't have" do
20
20
  it "returns a Hash without the values that it had keys for" do
21
- hash.except("B", "A", 3).should eql(Hamster.hash("C" => "see", nil => "NIL"))
21
+ hash.except("B", "A", 3).should eql(H["C" => "see", nil => "NIL"])
22
22
  end
23
23
 
24
24
  it "doesn't change the original Hash" do
25
25
  hash.except("B", "A", 3)
26
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
26
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
27
27
  end
28
28
  end
29
29
 
30
30
  it "works on a large Hash, with many combinations of input" do
31
31
  keys = (1..1000).to_a
32
- original = Hamster::Hash.new(keys.zip(2..1001))
32
+ original = H.new(keys.zip(2..1001))
33
33
  100.times do
34
34
  to_remove = rand(100).times.collect { keys.sample }
35
35
  result = original.except(*to_remove)
@@ -37,7 +37,7 @@ describe Hamster::Hash do
37
37
  to_remove.each { |key| result.key?(key).should == false }
38
38
  (keys.sample(100) - to_remove).each { |key| result.key?(key).should == true }
39
39
  end
40
- original.should eql(Hamster::Hash.new(keys.zip(2..1001))) # shouldn't have changed
40
+ original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
41
41
  end
42
42
  end
43
43
  end
@@ -6,13 +6,13 @@ describe Hamster::Hash do
6
6
  context "with no default provided" do
7
7
  context "when the key exists" do
8
8
  it "returns the value associated with the key" do
9
- Hamster.hash("A" => "aye").fetch("A").should == "aye"
9
+ H["A" => "aye"].fetch("A").should == "aye"
10
10
  end
11
11
  end
12
12
 
13
13
  context "when the key does not exist" do
14
14
  it "raises a KeyError" do
15
- -> { Hamster.hash("A" => "aye").fetch("B") }.should raise_error(KeyError)
15
+ -> { H["A" => "aye"].fetch("B") }.should raise_error(KeyError)
16
16
  end
17
17
  end
18
18
  end
@@ -20,13 +20,13 @@ describe Hamster::Hash do
20
20
  context "with a default value" do
21
21
  context "when the key exists" do
22
22
  it "returns the value associated with the key" do
23
- Hamster.hash("A" => "aye").fetch("A", "default").should == "aye"
23
+ H["A" => "aye"].fetch("A", "default").should == "aye"
24
24
  end
25
25
  end
26
26
 
27
27
  context "when the key does not exist" do
28
28
  it "returns the default value" do
29
- Hamster.hash("A" => "aye").fetch("B", "default").should == "default"
29
+ H["A" => "aye"].fetch("B", "default").should == "default"
30
30
  end
31
31
  end
32
32
  end
@@ -34,25 +34,25 @@ describe Hamster::Hash do
34
34
  context "with a default block" do
35
35
  context "when the key exists" do
36
36
  it "returns the value associated with the key" do
37
- Hamster.hash("A" => "aye").fetch("A") { "default".upcase }.should == "aye"
37
+ H["A" => "aye"].fetch("A") { "default".upcase }.should == "aye"
38
38
  end
39
39
  end
40
40
 
41
41
  context "when the key does not exist" do
42
42
  it "invokes the default block with the missing key as paramter" do
43
- Hamster.hash("A" => "aye").fetch("B") { |key| key.should == "B" }
44
- Hamster.hash("A" => "aye").fetch("B") { "default".upcase }.should == "DEFAULT"
43
+ H["A" => "aye"].fetch("B") { |key| key.should == "B" }
44
+ H["A" => "aye"].fetch("B") { "default".upcase }.should == "DEFAULT"
45
45
  end
46
46
  end
47
47
  end
48
48
 
49
49
  it "gives precedence to default block over default argument if passed both" do
50
- Hamster.hash("A" => "aye").fetch("B", 'one') { 'two' }.should == 'two'
50
+ H["A" => "aye"].fetch("B", 'one') { 'two' }.should == 'two'
51
51
  end
52
52
 
53
53
  it "raises an ArgumentError when not passed one or 2 arguments" do
54
- -> { Hamster.hash.fetch }.should raise_error(ArgumentError)
55
- -> { Hamster.hash.fetch(1, 2, 3) }.should raise_error(ArgumentError)
54
+ -> { H.empty.fetch }.should raise_error(ArgumentError)
55
+ -> { H.empty.fetch(1, 2, 3) }.should raise_error(ArgumentError)
56
56
  end
57
57
  end
58
58
  end
@@ -16,7 +16,7 @@ describe Hamster::Hash do
16
16
  [["A" => "aye", "B" => "bee", nil => "NIL"], "C", nil],
17
17
  ].each do |values, key, expected|
18
18
  describe "on #{values.inspect}" do
19
- let(:hash) { Hamster.hash(*values) }
19
+ let(:hash) { H[*values] }
20
20
 
21
21
  describe "with a block" do
22
22
  it "returns #{expected.inspect}" do
@@ -36,7 +36,7 @@ describe Hamster::Hash do
36
36
 
37
37
  it "stops iterating when the block returns true" do
38
38
  yielded = []
39
- Hamster.hash(a: 1, b: 2).find { |k,v| yielded << k; true }
39
+ H[a: 1, b: 2].find { |k,v| yielded << k; true }
40
40
  yielded.size.should == 1
41
41
  end
42
42
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
5
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
6
 
7
7
  describe "#flat_map" do
8
8
  it "yields each key/val pair" do
@@ -13,13 +13,13 @@ describe Hamster::Hash do
13
13
 
14
14
  it "returns the concatenation of block return values" do
15
15
  hash.flat_map { |k,v| [k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
16
- hash.flat_map { |k,v| Hamster.list(k,v) }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
17
- hash.flat_map { |k,v| Hamster.vector(k,v) }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
16
+ hash.flat_map { |k,v| L[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
17
+ hash.flat_map { |k,v| V[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
18
18
  end
19
19
 
20
20
  it "doesn't change the receiver" do
21
21
  hash.flat_map { |k,v| [k,v] }
22
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see"))
22
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
23
23
  end
24
24
 
25
25
  context "with no block" do
@@ -5,14 +5,14 @@ describe Hamster::Hash do
5
5
  describe "#flatten" do
6
6
  context "with flatten depth of zero" do
7
7
  it "returns a vector of keys/value" do
8
- hash = Hamster.hash(a: 1, b: 2)
8
+ hash = H[a: 1, b: 2]
9
9
  hash.flatten(0).sort.should eql(V[[:a, 1], [:b, 2]])
10
10
  end
11
11
  end
12
12
 
13
13
  context "without array keys or values" do
14
14
  it "returns a vector of keys and values" do
15
- hash = Hamster.hash(a: 1, b: 2, c: 3)
15
+ hash = H[a: 1, b: 2, c: 3]
16
16
  possibilities = [[:a, 1, :b, 2, :c, 3],
17
17
  [:a, 1, :c, 3, :b, 2],
18
18
  [:b, 2, :a, 1, :c, 3],
@@ -27,22 +27,22 @@ describe Hamster::Hash do
27
27
  end
28
28
 
29
29
  it "doesn't modify the receiver" do
30
- hash = Hamster.hash(a: 1, b: 2, c: 3)
30
+ hash = H[a: 1, b: 2, c: 3]
31
31
  hash.flatten(1)
32
32
  hash.flatten(2)
33
- hash.should eql(Hamster.hash(a: 1, b: 2, c: 3))
33
+ hash.should eql(H[a: 1, b: 2, c: 3])
34
34
  end
35
35
  end
36
36
 
37
37
  context "on an empty Hash" do
38
38
  it "returns an empty Vector" do
39
- Hamster.hash.flatten.should eql(V[])
39
+ H.empty.flatten.should eql(V.empty)
40
40
  end
41
41
  end
42
42
 
43
43
  context "with array keys" do
44
44
  it "flattens array keys into returned vector if flatten depth is sufficient" do
45
- hash = Hamster.hash([1, 2] => 3, [4, 5] => 6)
45
+ hash = H[[1, 2] => 3, [4, 5] => 6]
46
46
  [[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten(1)).should == true
47
47
  [[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten).should == true
48
48
  hash.flatten(1).class.should be(Hamster::Vector)
@@ -51,16 +51,16 @@ describe Hamster::Hash do
51
51
  end
52
52
 
53
53
  it "doesn't modify the receiver (or its contents)" do
54
- hash = Hamster.hash([1, 2] => 3, [4, 5] => 6)
54
+ hash = H[[1, 2] => 3, [4, 5] => 6]
55
55
  hash.flatten(1)
56
56
  hash.flatten(2)
57
- hash.should eql(Hamster.hash([1, 2] => 3, [4, 5] => 6))
57
+ hash.should eql(H[[1, 2] => 3, [4, 5] => 6])
58
58
  end
59
59
  end
60
60
 
61
61
  context "with array values" do
62
62
  it "flattens array values into returned vector if flatten depth is sufficient" do
63
- hash = Hamster.hash(1 => [2, 3], 4 => [5, 6])
63
+ hash = H[1 => [2, 3], 4 => [5, 6]]
64
64
  [[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten(1)).should == true
65
65
  [[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten).should == true
66
66
  [[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
@@ -69,16 +69,16 @@ describe Hamster::Hash do
69
69
  end
70
70
 
71
71
  it "doesn't modify the receiver (or its contents)" do
72
- hash = Hamster.hash(1 => [2, 3], 4 => [5, 6])
72
+ hash = H[1 => [2, 3], 4 => [5, 6]]
73
73
  hash.flatten(1)
74
74
  hash.flatten(2)
75
- hash.should eql(Hamster.hash(1 => [2, 3], 4 => [5, 6]))
75
+ hash.should eql(H[1 => [2, 3], 4 => [5, 6]])
76
76
  end
77
77
  end
78
78
 
79
79
  context "with vector keys" do
80
80
  it "flattens vector keys into returned vector if flatten depth is sufficient" do
81
- hash = Hamster.hash(V[1, 2] => 3, V[4, 5] => 6)
81
+ hash = H[V[1, 2] => 3, V[4, 5] => 6]
82
82
  [[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten).should == true
83
83
  [[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten(1)).should == true
84
84
  [[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
@@ -88,7 +88,7 @@ describe Hamster::Hash do
88
88
 
89
89
  context "with vector values" do
90
90
  it "flattens vector values into returned vector if flatten depth is sufficient" do
91
- hash = Hamster.hash(1 => V[2, 3], 4 => V[5, 6])
91
+ hash = H[1 => V[2, 3], 4 => V[5, 6]]
92
92
  [[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten(1)).should == true
93
93
  [[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten).should == true
94
94
  [[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true