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
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:include?, :member?, :contains?, :elem?].each do |method|
5
+ [:include?, :member?].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], "A", false],
@@ -22,7 +22,7 @@ describe Hamster::Vector do
22
22
  ].each do |values, item, expected|
23
23
  describe "on #{values.inspect}" do
24
24
  it "returns #{expected.inspect}" do
25
- Hamster.vector(*values).send(method, item).should == expected
25
+ V[*values].send(method, item).should == expected
26
26
  end
27
27
  end
28
28
  end
@@ -4,7 +4,7 @@ require 'pry'
4
4
 
5
5
  describe Hamster::Vector do
6
6
  describe "#insert" do
7
- let(:original) { Hamster.vector(1, 2, 3) }
7
+ let(:original) { V[1, 2, 3] }
8
8
 
9
9
  it "can add items at the beginning of a vector" do
10
10
  vector = original.insert(0, :a, :b)
@@ -48,7 +48,7 @@ describe Hamster::Vector do
48
48
  end
49
49
 
50
50
  it "works when adding to an empty Vector" do
51
- Hamster.vector.insert(0, :a).should eql(Hamster.vector(:a))
51
+ V.empty.insert(0, :a).should eql(V[:a])
52
52
  end
53
53
 
54
54
  it "has the right size and contents after many insertions" do
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
7
  describe "#inspect" do
8
8
  let(:inspect) { vector.inspect }
@@ -10,11 +10,11 @@ describe Hamster::Vector do
10
10
  [[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)], "A|B|C"]
11
11
  ].each do |values, expected|
12
12
  describe "on #{values.inspect}" do
13
- let(:vector) { Hamster.vector(*values) }
13
+ let(:vector) { V[*values] }
14
14
 
15
15
  it "preserves the original" do
16
16
  vector.join("|")
17
- vector.should eql(Hamster.vector(*values))
17
+ vector.should eql(V[*values])
18
18
  end
19
19
 
20
20
  it "returns #{expected.inspect}" do
@@ -31,11 +31,11 @@ describe Hamster::Vector do
31
31
  [[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)], "ABC"]
32
32
  ].each do |values, expected|
33
33
  describe "on #{values.inspect}" do
34
- let(:vector) { Hamster.vector(*values) }
34
+ let(:vector) { V[*values] }
35
35
 
36
36
  it "preserves the original" do
37
37
  vector.join
38
- vector.should eql(Hamster.vector(*values))
38
+ vector.should eql(V[*values])
39
39
  end
40
40
 
41
41
  it "returns #{expected.inspect}" do
@@ -51,7 +51,7 @@ describe Hamster::Vector do
51
51
 
52
52
  describe 'on ["A", "B", "C"]' do
53
53
  it 'returns "A**B**C"' do
54
- Hamster::Vector["A", "B", "C"].join.should == "A**B**C"
54
+ V["A", "B", "C"].join.should == "A**B**C"
55
55
  end
56
56
  end
57
57
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
7
  describe "#last" do
8
8
  let(:last) { vector.last }
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
7
  describe "#length" do
8
8
  let(:length) { vector.length }
@@ -2,13 +2,13 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
7
  describe "#<<" do
8
8
  let(:ltlt) { vector << added_value }
9
9
 
10
10
  shared_examples "checking adding values" do
11
- let(:added_vector) { Hamster.vector(*added_values) }
11
+ let(:added_vector) { V[*added_values] }
12
12
 
13
13
  it "preserves the original" do
14
14
  original = vector
@@ -5,7 +5,7 @@ describe Hamster::Vector do
5
5
  [:map, :collect].each do |method|
6
6
  describe "##{method}" do
7
7
  context "when empty" do
8
- let(:vector) { Hamster.vector }
8
+ let(:vector) { V.empty }
9
9
 
10
10
  it "returns self" do
11
11
  vector.send(method) {}.should equal(vector)
@@ -13,23 +13,23 @@ describe Hamster::Vector do
13
13
  end
14
14
 
15
15
  context "when not empty" do
16
- let(:vector) { Hamster.vector("A", "B", "C") }
16
+ let(:vector) { V["A", "B", "C"] }
17
17
 
18
18
  context "with a block" do
19
19
  it "preserves the original values" do
20
20
  vector.send(method, &:downcase)
21
- vector.should eql(Hamster.vector("A", "B", "C"))
21
+ vector.should eql(V["A", "B", "C"])
22
22
  end
23
23
 
24
24
  it "returns a new vector with the mapped values" do
25
- vector.send(method, &:downcase).should eql(Hamster.vector("a", "b", "c"))
25
+ vector.send(method, &:downcase).should eql(V["a", "b", "c"])
26
26
  end
27
27
  end
28
28
 
29
29
  context "with no block" do
30
30
  it "returns an Enumerator" do
31
31
  vector.send(method).class.should be(Enumerator)
32
- vector.send(method).each(&:downcase).should eql(Hamster.vector('a', 'b', 'c'))
32
+ vector.send(method).each(&:downcase).should eql(V['a', 'b', 'c'])
33
33
  end
34
34
  end
35
35
  end
@@ -7,7 +7,7 @@ describe Hamster::Vector 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 'vector = Hamster.vector(5, 10, 15); $stdout.write(Marshal.dump(vector))'|
10
+ %Q|#{ruby} -I lib -r hamster -e 'vector = Hamster::Vector[5, 10, 15]; $stdout.write(Marshal.dump(vector))'|
11
11
  end
12
12
 
13
13
  let(:reloaded_vector) do
@@ -19,7 +19,7 @@ describe Hamster::Vector do
19
19
  end
20
20
 
21
21
  it "can survive dumping and loading into a new process" do
22
- expect(reloaded_vector).to eql(Hamster.vector(5, 10, 15))
22
+ expect(reloaded_vector).to eql(V[5, 10, 15])
23
23
  end
24
24
 
25
25
  it "is still possible to find items by index after loading" do
@@ -2,32 +2,30 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:maximum, :max].each do |method|
6
- describe "##{method}" do
7
- context "with a block" do
8
- [
9
- [[], nil],
10
- [["A"], "A"],
11
- [%w[Ichi Ni San], "Ichi"],
12
- ].each do |values, expected|
13
- describe "on #{values.inspect}" do
14
- it "returns #{expected.inspect}" do
15
- Hamster.vector(*values).send(method) { |maximum, item| maximum.length <=> item.length }.should == expected
16
- end
5
+ describe "#max" do
6
+ context "with a block" do
7
+ [
8
+ [[], nil],
9
+ [["A"], "A"],
10
+ [%w[Ichi Ni San], "Ichi"],
11
+ ].each do |values, expected|
12
+ describe "on #{values.inspect}" do
13
+ it "returns #{expected.inspect}" do
14
+ V[*values].max { |maximum, item| maximum.length <=> item.length }.should == expected
17
15
  end
18
16
  end
19
17
  end
18
+ end
20
19
 
21
- context "without a block" do
22
- [
23
- [[], nil],
24
- [["A"], "A"],
25
- [%w[Ichi Ni San], "San"],
26
- ].each do |values, expected|
27
- describe "on #{values.inspect}" do
28
- it "returns #{expected.inspect}" do
29
- Hamster.vector(*values).send(method).should == expected
30
- end
20
+ context "without a block" do
21
+ [
22
+ [[], nil],
23
+ [["A"], "A"],
24
+ [%w[Ichi Ni San], "San"],
25
+ ].each do |values, expected|
26
+ describe "on #{values.inspect}" do
27
+ it "returns #{expected.inspect}" do
28
+ V[*values].max.should == expected
31
29
  end
32
30
  end
33
31
  end
@@ -2,32 +2,30 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:minimum, :min].each do |method|
6
- describe "##{method}" do
7
- context "with a block" do
8
- [
9
- [[], nil],
10
- [["A"], "A"],
11
- [%w[Ichi Ni San], "Ni"],
12
- ].each do |values, expected|
13
- describe "on #{values.inspect}" do
14
- it "returns #{expected.inspect}" do
15
- Hamster.vector(*values).send(method) { |minimum, item| minimum.length <=> item.length }.should == expected
16
- end
5
+ describe "#min" do
6
+ context "with a block" do
7
+ [
8
+ [[], nil],
9
+ [["A"], "A"],
10
+ [%w[Ichi Ni San], "Ni"],
11
+ ].each do |values, expected|
12
+ describe "on #{values.inspect}" do
13
+ it "returns #{expected.inspect}" do
14
+ V[*values].min { |minimum, item| minimum.length <=> item.length }.should == expected
17
15
  end
18
16
  end
19
17
  end
18
+ end
20
19
 
21
- context "without a block" do
22
- [
23
- [[], nil],
24
- [["A"], "A"],
25
- [%w[Ichi Ni San], "Ichi"],
26
- ].each do |values, expected|
27
- describe "on #{values.inspect}" do
28
- it "returns #{expected.inspect}" do
29
- Hamster.vector(*values).send(method).should == expected
30
- end
20
+ context "without a block" do
21
+ [
22
+ [[], nil],
23
+ [["A"], "A"],
24
+ [%w[Ichi Ni San], "Ichi"],
25
+ ].each do |values, expected|
26
+ describe "on #{values.inspect}" do
27
+ it "returns #{expected.inspect}" do
28
+ V[*values].min.should == expected
31
29
  end
32
30
  end
33
31
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#*" do
6
- let(:vector) { Hamster.vector(1, 2, 3) }
6
+ let(:vector) { V[1, 2, 3] }
7
7
 
8
8
  context "with a String argument" do
9
9
  it "acts just like #join" do
@@ -13,10 +13,10 @@ describe Hamster::Vector do
13
13
 
14
14
  context "with an Integer argument" do
15
15
  it "concatenates n copies of the array" do
16
- (vector * 0).should eql(Hamster.vector)
16
+ (vector * 0).should eql(V.empty)
17
17
  (vector * 1).should eql(vector)
18
- (vector * 2).should eql(Hamster.vector(1,2,3,1,2,3))
19
- (vector * 3).should eql(Hamster.vector(1,2,3,1,2,3,1,2,3))
18
+ (vector * 2).should eql(V[1,2,3,1,2,3])
19
+ (vector * 3).should eql(V[1,2,3,1,2,3,1,2,3])
20
20
  end
21
21
 
22
22
  it "raises an ArgumentError if integer is negative" do
@@ -14,7 +14,7 @@ describe Hamster::Vector do
14
14
  [[4], [], [4]],
15
15
  ].each do |values, expected_matches, expected_remainder|
16
16
  describe "on #{values.inspect}" do
17
- let(:vector) { Hamster.vector(*values) }
17
+ let(:vector) { V[*values] }
18
18
 
19
19
  describe "with a block" do
20
20
  let(:result) { vector.partition(&:odd?) }
@@ -23,7 +23,7 @@ describe Hamster::Vector do
23
23
 
24
24
  it "preserves the original" do
25
25
  result
26
- vector.should eql(Hamster.vector(*values))
26
+ vector.should eql(V[*values])
27
27
  end
28
28
 
29
29
  it "returns a frozen array with two items" do
@@ -33,18 +33,18 @@ describe Hamster::Vector do
33
33
  end
34
34
 
35
35
  it "correctly identifies the matches" do
36
- matches.should eql(Hamster.vector(*expected_matches))
36
+ matches.should eql(V[*expected_matches])
37
37
  end
38
38
 
39
39
  it "correctly identifies the remainder" do
40
- remainder.should eql(Hamster.vector(*expected_remainder))
40
+ remainder.should eql(V[*expected_remainder])
41
41
  end
42
42
  end
43
43
 
44
44
  describe "without a block" do
45
45
  it "returns an Enumerator" do
46
46
  vector.partition.class.should be(Enumerator)
47
- vector.partition.each(&:odd?).should eql([Hamster::Vector.new(expected_matches), Hamster::Vector.new(expected_remainder)])
47
+ vector.partition.each(&:odd?).should eql([V.new(expected_matches), V.new(expected_remainder)])
48
48
  end
49
49
  end
50
50
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#permutation" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
6
+ let(:vector) { V[1,2,3,4] }
7
7
 
8
8
  context "without a block or arguments" do
9
9
  it "returns an Enumerator of all permutations" do
@@ -51,7 +51,7 @@ describe Hamster::Vector do
51
51
  context "on an empty vector" do
52
52
  it "yields the empty permutation" do
53
53
  yielded = []
54
- Hamster.vector.permutation { |obj| yielded << obj }
54
+ V.empty.permutation { |obj| yielded << obj }
55
55
  yielded.should eql([[]])
56
56
  end
57
57
  end
@@ -71,13 +71,13 @@ describe Hamster::Vector do
71
71
  end
72
72
 
73
73
  it "handles duplicate elements correctly" do
74
- Hamster.vector(1,2,3,1).permutation(2).sort.should eql([[1,1], [1,1], [1,2], [1,2],
74
+ V[1,2,3,1].permutation(2).sort.should eql([[1,1], [1,1], [1,2], [1,2],
75
75
  [1,3], [1,3], [2,1],[2,1],[2,3], [3,1],[3,1],[3,2]])
76
76
  end
77
77
 
78
78
  it "leaves the original unmodified" do
79
79
  vector.permutation(2) {}
80
- vector.should eql(Hamster.vector(1,2,3,4))
80
+ vector.should eql(V[1,2,3,4])
81
81
  end
82
82
 
83
83
  it "behaves like Array#permutation" do
@@ -11,15 +11,15 @@ describe Hamster::Vector do
11
11
  [1..33, 1..32]
12
12
  ].each do |values, expected|
13
13
  context "on #{values.inspect}" do
14
- let(:vector) { Hamster.vector(*values) }
14
+ let(:vector) { V[*values] }
15
15
 
16
16
  it "preserves the original" do
17
17
  vector.pop
18
- vector.should eql(Hamster.vector(*values))
18
+ vector.should eql(V[*values])
19
19
  end
20
20
 
21
21
  it "returns #{expected.inspect}" do
22
- vector.pop.should eql(Hamster.vector(*expected))
22
+ vector.pop.should eql(V[*expected])
23
23
  end
24
24
  end
25
25
  end
@@ -10,13 +10,13 @@ describe Hamster::Vector do
10
10
  [[2], 2],
11
11
  [[1, 3, 5, 7, 11], 1155],
12
12
  ].each do |values, expected|
13
- Hamster.vector(*values).product.should == expected
13
+ V[*values].product.should == expected
14
14
  end
15
15
  end
16
16
  end
17
17
 
18
18
  context "when passed one or more vectors" do
19
- let(:vector) { Hamster.vector(1,2,3) }
19
+ let(:vector) { V[1,2,3] }
20
20
 
21
21
  context "when passed a block" do
22
22
  it "yields an array for each combination of items from the vectors" do
@@ -25,7 +25,7 @@ describe Hamster::Vector do
25
25
  yielded.should eql([[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3]])
26
26
 
27
27
  yielded = []
28
- vector.product(Hamster.vector(3,4,5), Hamster.vector(6,8)) { |obj| yielded << obj }
28
+ vector.product(V[3,4,5], V[6,8]) { |obj| yielded << obj }
29
29
  yielded.should eql(
30
30
  [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
31
31
  [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8],
@@ -33,15 +33,15 @@ describe Hamster::Vector do
33
33
  end
34
34
 
35
35
  it "returns self" do
36
- vector.product(Hamster.vector) {}.should be(vector)
37
- vector.product(Hamster.vector(1,2), Hamster.vector(3)) {}.should be(vector)
38
- Hamster.vector.product(vector) {}.should be(Hamster.vector)
36
+ vector.product(V.empty) {}.should be(vector)
37
+ vector.product(V[1,2], V[3]) {}.should be(vector)
38
+ V.empty.product(vector) {}.should be(V.empty)
39
39
  end
40
40
  end
41
41
 
42
42
  context "when not passed a block" do
43
43
  it "returns the cartesian product in an array" do
44
- Hamster.vector(1,2).product(Hamster.vector(3,4,5), Hamster.vector(6,8)).should eql(
44
+ V[1,2].product(V[3,4,5], V[6,8]).should eql(
45
45
  [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
46
46
  [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
47
47
  end
@@ -49,20 +49,20 @@ describe Hamster::Vector do
49
49
 
50
50
  context "when one of the arguments is empty" do
51
51
  it "returns an empty array" do
52
- vector.product(Hamster.vector, Hamster.vector(4,5,6)).should eql([])
52
+ vector.product(V.empty, V[4,5,6]).should eql([])
53
53
  end
54
54
  end
55
55
 
56
56
  context "when the receiver is empty" do
57
57
  it "returns an empty array" do
58
- Hamster.vector.product(vector, Hamster.vector(4,5,6)).should eql([])
58
+ V.empty.product(vector, V[4,5,6]).should eql([])
59
59
  end
60
60
  end
61
61
  end
62
62
 
63
63
  context "when passed one or more Arrays" do
64
64
  it "also calculates the cartesian product correctly" do
65
- Hamster.vector(1,2).product([3,4,5], [6,8]).should eql(
65
+ V[1,2].product([3,4,5], [6,8]).should eql(
66
66
  [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
67
67
  [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
68
68
  end