hamster 1.0.1.pre.rc3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -5,7 +5,7 @@ describe Hamster::Hash do
5
5
  [:get, :[]].each do |method|
6
6
  describe "##{method}" do
7
7
  context "with a default block" do
8
- let(:hash) { Hamster.hash("A" => "aye") { |key| fail }}
8
+ let(:hash) { H.new("A" => "aye") { |key| fail }}
9
9
 
10
10
  context "when the key exists" do
11
11
  it "returns the value associated with the key" do
@@ -13,13 +13,13 @@ describe Hamster::Hash do
13
13
  end
14
14
 
15
15
  it "does not call the default block even if the key is 'nil'" do
16
- Hamster.hash(nil => 'something') { fail }.send(method, nil)
16
+ H.new(nil => 'something') { fail }.send(method, nil)
17
17
  end
18
18
  end
19
19
 
20
20
  context "when the key does not exist" do
21
21
  let(:hash) do
22
- Hamster.hash("A" => "aye") do |key|
22
+ H.new("A" => "aye") do |key|
23
23
  expect(key).to eq("B")
24
24
  "bee"
25
25
  end
@@ -32,7 +32,7 @@ describe Hamster::Hash do
32
32
  end
33
33
 
34
34
  context "with no default block" do
35
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
35
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
36
36
 
37
37
  [
38
38
  %w[A aye],
@@ -53,7 +53,7 @@ describe Hamster::Hash do
53
53
  it "uses #hash to look up keys" do
54
54
  x = double('0')
55
55
  x.should_receive(:hash).and_return(0)
56
- Hamster.hash(foo: :bar).send(method, x).should be_nil
56
+ H[foo: :bar].send(method, x).should be_nil
57
57
  end
58
58
 
59
59
  it "uses #eql? to compare keys with the same hash code" do
@@ -63,7 +63,7 @@ describe Hamster::Hash do
63
63
  y = double('y', hash: 42)
64
64
  y.should_receive(:eql?).and_return(true)
65
65
 
66
- Hamster.hash(y => 1)[x].should == 1
66
+ H[y => 1][x].should == 1
67
67
  end
68
68
 
69
69
  it "does not use #eql? to compare keys with different hash codes" do
@@ -73,7 +73,7 @@ describe Hamster::Hash do
73
73
  y = double('y', hash: 1)
74
74
  y.should_not_receive(:eql?)
75
75
 
76
- Hamster.hash(y => 1)[x].should be_nil
76
+ H[y => 1][x].should be_nil
77
77
  end
78
78
  end
79
79
  end
@@ -4,7 +4,7 @@ require "hamster/hash"
4
4
  describe Hamster::Hash do
5
5
  [:key?, :has_key?, :include?, :member?].each do |method|
6
6
  describe "##{method}" do
7
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL", 2.0 => "two") }
7
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL", 2.0 => "two"] }
8
8
 
9
9
  ["A", "B", "C", nil, 2.0].each do |key|
10
10
  it "returns true for an existing key (#{key.inspect})" do
@@ -21,11 +21,11 @@ describe Hamster::Hash do
21
21
  end
22
22
 
23
23
  it "returns true if the key is found and maps to nil" do
24
- Hamster.hash("A" => nil).send(method, "A").should == true
24
+ H["A" => nil].send(method, "A").should == true
25
25
  end
26
26
 
27
27
  it "returns true if the key is found and maps to false" do
28
- Hamster.hash("A" => false).send(method, "A").should == true
28
+ H["A" => false].send(method, "A").should == true
29
29
  end
30
30
  end
31
31
  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(toast: 'buttered', jam: 'strawberry') }
5
+ let(:hash) { H[toast: 'buttered', jam: 'strawberry'] }
6
6
 
7
7
  [:value?, :has_value?].each do |method|
8
8
  describe "##{method}" do
@@ -15,12 +15,12 @@ describe Hamster::Hash do
15
15
  end
16
16
 
17
17
  it "uses #== to check equality" do
18
- Hamster.hash(a: EqualNotEql.new).send(method, EqualNotEql.new).should == true
19
- Hamster.hash(a: EqlNotEqual.new).send(method, EqlNotEqual.new).should == false
18
+ H[a: EqualNotEql.new].send(method, EqualNotEql.new).should == true
19
+ H[a: EqlNotEqual.new].send(method, EqlNotEqual.new).should == false
20
20
  end
21
21
 
22
22
  it "works on a large hash" do
23
- large = Hamster::Hash.new((1..1000).zip(2..1001))
23
+ large = H.new((1..1000).zip(2..1001))
24
24
  [2, 100, 200, 500, 900, 1000, 1001].each { |n| large.value?(n).should == true }
25
25
  end
26
26
  end
@@ -4,26 +4,26 @@ require "hamster/hash"
4
4
  describe Hamster::Hash do
5
5
  describe "#hash" do
6
6
  it "values are sufficiently distributed" do
7
- (1..4000).each_slice(4).map { |ka, va, kb, vb| Hamster.hash(ka => va, kb => vb).hash }.uniq.size.should == 1000
7
+ (1..4000).each_slice(4).map { |ka, va, kb, vb| H[ka => va, kb => vb].hash }.uniq.size.should == 1000
8
8
  end
9
9
 
10
10
  it "differs given the same keys and different values" do
11
- Hamster.hash("ka" => "va").hash.should_not == Hamster.hash("ka" => "vb").hash
11
+ H["ka" => "va"].hash.should_not == H["ka" => "vb"].hash
12
12
  end
13
13
 
14
14
  it "differs given the same values and different keys" do
15
- Hamster.hash("ka" => "va").hash.should_not == Hamster.hash("kb" => "va").hash
15
+ H["ka" => "va"].hash.should_not == H["kb" => "va"].hash
16
16
  end
17
17
 
18
18
  it "generates the same hash value for a hash regardless of the order things were added to it" do
19
19
  key1 = DeterministicHash.new('abc', 1)
20
20
  key2 = DeterministicHash.new('xyz', 1)
21
- Hamster.hash.put(key1, nil).put(key2, nil).hash.should == Hamster.hash.put(key2, nil).put(key1, nil).hash
21
+ H.empty.put(key1, nil).put(key2, nil).hash.should == H.empty.put(key2, nil).put(key1, nil).hash
22
22
  end
23
23
 
24
24
  describe "on an empty hash" do
25
25
  it "returns 0" do
26
- Hamster.hash.hash.should == 0
26
+ H.empty.hash.should == 0
27
27
  end
28
28
  end
29
29
  end
@@ -10,7 +10,7 @@ describe Hamster::Hash do
10
10
  ].each do |values, expected|
11
11
  describe "on #{values.inspect}" do
12
12
  it "returns #{expected.inspect}" do
13
- Hamster.hash(*values).inspect.should == expected
13
+ H[*values].inspect.should == expected
14
14
  end
15
15
  end
16
16
  end
@@ -22,7 +22,7 @@ describe Hamster::Hash do
22
22
  ].each do |values|
23
23
  describe "on #{values.inspect}" do
24
24
  it "returns a string which can be eval'd to get an equivalent object" do
25
- original = Hamster::Hash.new(values)
25
+ original = H.new(values)
26
26
  eval(original.inspect).should eql(original)
27
27
  end
28
28
  end
@@ -3,21 +3,21 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#invert" do
6
- let(:hash) { Hamster.hash(a: 3, b: 2, c: 1) }
6
+ let(:hash) { H[a: 3, b: 2, c: 1] }
7
7
 
8
8
  it "uses the existing keys as values and values as keys" do
9
- hash.invert.should eql(Hamster.hash(3 => :a, 2 => :b, 1 => :c))
9
+ hash.invert.should eql(H[3 => :a, 2 => :b, 1 => :c])
10
10
  end
11
11
 
12
12
  it "will select one key/value pair among multiple which have same value" do
13
- [Hamster.hash(1 => :a),
14
- Hamster.hash(1 => :b),
15
- Hamster.hash(1 => :c)].include?(Hamster.hash(a: 1, b: 1, c: 1).invert).should == true
13
+ [H[1 => :a],
14
+ H[1 => :b],
15
+ H[1 => :c]].include?(H[a: 1, b: 1, c: 1].invert).should == true
16
16
  end
17
17
 
18
18
  it "doesn't change the original Hash" do
19
19
  hash.invert
20
- hash.should eql(Hamster.hash(a: 3, b: 2, c: 1))
20
+ hash.should eql(H[a: 3, b: 2, c: 1])
21
21
  end
22
22
 
23
23
  context "from a subclass of Hash" do
@@ -3,7 +3,7 @@ require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
5
  describe "#key" do
6
- let(:hash) { Hamster.hash(a: 1, b: 1, c: 2, d: 3) }
6
+ let(:hash) { H[a: 1, b: 1, c: 2, d: 3] }
7
7
 
8
8
  it "returns a key associated with the given value, if there is one" do
9
9
  [:a, :b].include?(hash.key(1)).should == true
@@ -22,7 +22,7 @@ describe Hamster::Hash do
22
22
  end
23
23
 
24
24
  it "doesn't use default block if value is not found" do
25
- Hamster.hash(a: 1) { fail }.key(2).should be_nil
25
+ H.new(a: 1) { fail }.key(2).should be_nil
26
26
  end
27
27
  end
28
28
  end
@@ -4,10 +4,10 @@ require "hamster/set"
4
4
 
5
5
  describe Hamster::Hash do
6
6
  describe "#keys" do
7
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
7
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
8
8
 
9
9
  it "returns the keys as a set" do
10
- hash.keys.should eql(Hamster.set("A", "B", "C"))
10
+ hash.keys.should eql(S["A", "B", "C"])
11
11
  end
12
12
 
13
13
  it "returns frozen String keys" do
@@ -6,23 +6,23 @@ describe Hamster::Hash do
6
6
  describe "##{method}" do
7
7
  context "when empty" do
8
8
  it "returns self" do
9
- Hamster.hash.send(method) {}.should equal(Hamster.hash)
9
+ H.empty.send(method) {}.should equal(H.empty)
10
10
  end
11
11
  end
12
12
 
13
13
  context "when not empty" 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
  context "with a block" do
17
17
  let(:mapped) { hash.send(method) { |key, value| [key.downcase, value.upcase] }}
18
18
 
19
19
  it "preserves the original values" do
20
20
  mapped
21
- hash.should eql(Hamster.hash("A" => "aye", "B" => "bee", "C" => "see"))
21
+ hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
22
22
  end
23
23
 
24
24
  it "returns a new hash with the mapped values" do
25
- mapped.should eql(Hamster.hash("a" => "AYE", "b" => "BEE", "c" => "SEE"))
25
+ mapped.should eql(H["a" => "AYE", "b" => "BEE", "c" => "SEE"])
26
26
  end
27
27
  end
28
28
 
@@ -7,7 +7,7 @@ describe Hamster::Hash do
7
7
  File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
8
8
  end
9
9
  let(:child_cmd) do
10
- %Q|#{ruby} -I lib -r hamster -e 'dict = Hamster.hash existing_key: 42, other_thing: "data"; $stdout.write(Marshal.dump(dict))'|
10
+ %Q|#{ruby} -I lib -r hamster -e 'dict = Hamster::Hash[existing_key: 42, other_thing: "data"]; $stdout.write(Marshal.dump(dict))'|
11
11
  end
12
12
 
13
13
  let(:reloaded_hash) do
@@ -19,7 +19,7 @@ describe Hamster::Hash do
19
19
  end
20
20
 
21
21
  it "can survive dumping and loading into a new process" do
22
- expect(reloaded_hash).to eql(Hamster.hash(existing_key: 42, other_thing: "data"))
22
+ expect(reloaded_hash).to eql(H[existing_key: 42, other_thing: "data"])
23
23
  end
24
24
 
25
25
  it "is still possible to find items by key after loading" do
@@ -2,76 +2,82 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- [:merge, :+].each do |method|
6
- describe "##{method}" do
7
- [
8
- [{}, {}, {}],
9
- [{"A" => "aye"}, {}, {"A" => "aye"}],
10
- [{"A" => "aye"}, {"A" => "bee"}, {"A" => "bee"}],
11
- [{"A" => "aye"}, {"B" => "bee"}, {"A" => "aye", "B" => "bee"}],
12
- [(1..300).zip(1..300), (150..450).zip(150..450), (1..450).zip(1..450)]
13
- ].each do |a, b, expected|
14
- context "for #{a.inspect} and #{b.inspect}" do
15
- let(:hash_a) { Hamster.hash(a) }
16
- let(:hash_b) { Hamster.hash(b) }
17
- let(:result) { hash_a.send(method, hash_b) }
5
+ describe "#merge" do
6
+ [
7
+ [{}, {}, {}],
8
+ [{"A" => "aye"}, {}, {"A" => "aye"}],
9
+ [{"A" => "aye"}, {"A" => "bee"}, {"A" => "bee"}],
10
+ [{"A" => "aye"}, {"B" => "bee"}, {"A" => "aye", "B" => "bee"}],
11
+ [(1..300).zip(1..300), (150..450).zip(150..450), (1..450).zip(1..450)]
12
+ ].each do |a, b, expected|
13
+ context "for #{a.inspect} and #{b.inspect}" do
14
+ let(:hash_a) { H[a] }
15
+ let(:hash_b) { H[b] }
16
+ let(:result) { hash_a.merge(hash_b) }
18
17
 
19
- it "returns #{expected.inspect} when passed a Hamster::Hash" do
20
- result.should eql(Hamster.hash(expected))
21
- end
18
+ it "returns #{expected.inspect} when passed a Hamster::Hash" do
19
+ result.should eql(H[expected])
20
+ end
22
21
 
23
- it "returns #{expected.inspect} when passed a Ruby Hash" do
24
- Hamster.hash(a).send(method, ::Hash[b]).should eql(Hamster.hash(expected))
25
- end
22
+ it "returns #{expected.inspect} when passed a Ruby Hash" do
23
+ H[a].merge(::Hash[b]).should eql(H[expected])
24
+ end
26
25
 
27
- it "doesn't change the original Hashes" do
28
- result
29
- hash_a.should eql(Hamster.hash(a))
30
- hash_b.should eql(Hamster.hash(b))
31
- end
26
+ it "doesn't change the original Hashes" do
27
+ result
28
+ hash_a.should eql(H[a])
29
+ hash_b.should eql(H[b])
32
30
  end
33
31
  end
32
+ end
34
33
 
35
- context "when merging with an empty Hash" do
36
- it "returns self" do
37
- hash = Hamster.hash(a: 1, b: 2)
38
- hash.send(method, Hamster.hash).should be(hash)
39
- end
34
+ context "when merging with an empty Hash" do
35
+ it "returns self" do
36
+ hash = H[a: 1, b: 2]
37
+ hash.merge(H.empty).should be(hash)
40
38
  end
39
+ end
41
40
 
42
- context "when called on a subclass" do
43
- it "returns an instance of the subclass" do
44
- subclass = Class.new(Hamster::Hash)
45
- instance = subclass.new(a: 1, b: 2)
46
- instance.merge(c: 3, d: 4).class.should be(subclass)
47
- end
41
+ context "when merging with subset Hash" do
42
+ it "returns self" do
43
+ big_hash = H[(1..300).zip(1..300)]
44
+ small_hash = H[(1..200).zip(1..200)]
45
+ big_hash.merge(small_hash).should be(big_hash)
48
46
  end
47
+ end
49
48
 
50
- it "sets any duplicate key to the value of block if passed a block" do
51
- h1 = Hamster.hash(:a => 2, :b => 1, :d => 5)
52
- h2 = Hamster.hash(:a => -2, :b => 4, :c => -3)
53
- r = h1.merge(h2) { |k,x,y| nil }
54
- r.should eql(Hamster.hash(:a => nil, :b => nil, :c => -3, :d => 5))
49
+ context "when called on a subclass" do
50
+ it "returns an instance of the subclass" do
51
+ subclass = Class.new(Hamster::Hash)
52
+ instance = subclass.new(a: 1, b: 2)
53
+ instance.merge(c: 3, d: 4).class.should be(subclass)
54
+ end
55
+ end
55
56
 
56
- r = h1.merge(h2) { |k,x,y| "#{k}:#{x+2*y}" }
57
- r.should eql(Hamster.hash(:a => "a:-2", :b => "b:9", :c => -3, :d => 5))
57
+ it "sets any duplicate key to the value of block if passed a block" do
58
+ h1 = H[a: 2, b: 1, d: 5]
59
+ h2 = H[a: -2, b: 4, c: -3]
60
+ r = h1.merge(h2) { |k,x,y| nil }
61
+ r.should eql(H[a: nil, b: nil, c: -3, d: 5])
58
62
 
59
- lambda {
60
- h1.merge(h2) { |k, x, y| raise(IndexError) }
61
- }.should raise_error(IndexError)
63
+ r = h1.merge(h2) { |k,x,y| "#{k}:#{x+2*y}" }
64
+ r.should eql(H[a: "a:-2", b: "b:9", c: -3, d: 5])
62
65
 
63
- r = h1.merge(h1) { |k,x,y| :x }
64
- r.should eql(Hamster.hash(:a => :x, :b => :x, :d => :x))
65
- end
66
+ lambda {
67
+ h1.merge(h2) { |k, x, y| raise(IndexError) }
68
+ }.should raise_error(IndexError)
66
69
 
67
- it "yields key/value pairs in the same order as #each" do
68
- hash = Hamster.hash(a: 1, b: 2, c: 3)
69
- each_pairs = []
70
- merge_pairs = []
71
- hash.each { |k, v| each_pairs << [k, v] }
72
- hash.merge(hash) { |k, v1, v2| merge_pairs << [k, v1] }
73
- each_pairs.should == merge_pairs
74
- end
70
+ r = h1.merge(h1) { |k,x,y| :x }
71
+ r.should eql(H[a: :x, b: :x, d: :x])
72
+ end
73
+
74
+ it "yields key/value pairs in the same order as #each" do
75
+ hash = H[a: 1, b: 2, c: 3]
76
+ each_pairs = []
77
+ merge_pairs = []
78
+ hash.each { |k, v| each_pairs << [k, v] }
79
+ hash.merge(hash) { |k, v1, v2| merge_pairs << [k, v1] }
80
+ each_pairs.should == merge_pairs
75
81
  end
76
82
  end
77
83
  end
@@ -2,21 +2,17 @@ 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
- [:min, :minimum].each do |method|
8
- describe "##{method}" do
9
- it "returns the smallest key/val pair" do
10
- hash.send(method).should == ["a", 3]
11
- end
7
+ describe "#min" do
8
+ it "returns the smallest key/val pair" do
9
+ hash.min.should == ["a", 3]
12
10
  end
13
11
  end
14
12
 
15
- [:max, :maximum].each do |method|
16
- describe "##{method}" do
17
- it "returns the largest key/val pair" do
18
- hash.send(method).should == ["c", 1]
19
- end
13
+ describe "#max" do
14
+ it "returns the largest key/val pair" do
15
+ hash.max.should == ["c", 1]
20
16
  end
21
17
  end
22
18
 
@@ -30,7 +26,7 @@ describe Hamster::Hash do
30
26
  end
31
27
 
32
28
  it "returns nil if the hash is empty" do
33
- Hamster.hash.min_by { |k,v| v }.should be_nil
29
+ H.empty.min_by { |k,v| v }.should be_nil
34
30
  end
35
31
  end
36
32
 
@@ -44,7 +40,7 @@ describe Hamster::Hash do
44
40
  end
45
41
 
46
42
  it "returns nil if the hash is empty" do
47
- Hamster.hash.max_by { |k,v| v }.should be_nil
43
+ H.empty.max_by { |k,v| v }.should be_nil
48
44
  end
49
45
  end
50
46
  end