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
@@ -10,11 +10,11 @@ describe Hamster::Set 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
  context "on #{values.inspect}" do
13
- let(:set) { Hamster.set(*values) }
13
+ let(:set) { S[*values] }
14
14
 
15
15
  it "preserves the original" do
16
16
  set.join("|")
17
- set.should eql(Hamster.set(*values))
17
+ set.should eql(S[*values])
18
18
  end
19
19
 
20
20
  it "returns #{expected.inspect}" do
@@ -31,11 +31,11 @@ describe Hamster::Set do
31
31
  [[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)], "ABC"]
32
32
  ].each do |values, expected|
33
33
  context "on #{values.inspect}" do
34
- let(:set) { Hamster.set(*values) }
34
+ let(:set) { S[*values] }
35
35
 
36
36
  it "preserves the original" do
37
37
  set.join
38
- set.should eql(Hamster.set(*values))
38
+ set.should eql(S[*values])
39
39
  end
40
40
 
41
41
  it "returns #{expected.inspect}" do
@@ -47,13 +47,13 @@ describe Hamster::Set do
47
47
 
48
48
  context "without a separator (with global default separator set)" do
49
49
  before { $, = '**' }
50
- let(:set) { Hamster::Set[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)] }
50
+ let(:set) { S[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)] }
51
51
  after { $, = nil }
52
52
 
53
53
  context "on ['A', 'B', 'C']" do
54
54
  it "preserves the original" do
55
55
  set.join
56
- set.should eql(Hamster::Set[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)])
56
+ set.should eql(S[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)])
57
57
  end
58
58
 
59
59
  it "returns #{@expected.inspect}" do
@@ -6,28 +6,28 @@ describe Hamster::Set do
6
6
  describe "##{method}" do
7
7
  context "when empty" do
8
8
  it "returns self" do
9
- Hamster.set.send(method) {}.should equal(Hamster.set)
9
+ S.empty.send(method) {}.should equal(S.empty)
10
10
  end
11
11
  end
12
12
 
13
13
  context "when not empty" do
14
- let(:set) { Hamster.set("A", "B", "C") }
14
+ let(:set) { S["A", "B", "C"] }
15
15
 
16
16
  context "with a block" do
17
17
  it "preserves the original values" do
18
18
  set.send(method, &:downcase)
19
- set.should eql(Hamster.set("A", "B", "C"))
19
+ set.should eql(S["A", "B", "C"])
20
20
  end
21
21
 
22
22
  it "returns a new set with the mapped values" do
23
- set.send(method, &:downcase).should eql(Hamster.set("a", "b", "c"))
23
+ set.send(method, &:downcase).should eql(S["a", "b", "c"])
24
24
  end
25
25
  end
26
26
 
27
27
  context "with no block" do
28
28
  it "returns an Enumerator" do
29
29
  set.send(method).class.should be(Enumerator)
30
- set.send(method).each(&:downcase).should == Hamster.set('a', 'b', 'c')
30
+ set.send(method).each(&:downcase).should == S['a', 'b', 'c']
31
31
  end
32
32
  end
33
33
  end
@@ -42,7 +42,7 @@ describe Hamster::Set do
42
42
 
43
43
  context "when multiple items map to the same value" do
44
44
  it "filters out the duplicates" do
45
- set = Hamster::Set.new('aa'..'zz')
45
+ set = S.new('aa'..'zz')
46
46
  result = set.map { |s| s[0] }
47
47
  result.should eql(Hamster::Set.new('a'..'z'))
48
48
  result.size.should == 26
@@ -50,7 +50,7 @@ describe Hamster::Set do
50
50
  end
51
51
 
52
52
  it "works on large sets" do
53
- set = Hamster::Set.new(1..1000)
53
+ set = S.new(1..1000)
54
54
  result = set.map { |x| x * 10 }
55
55
  result.size.should == 1000
56
56
  1.upto(1000) { |n| result.include?(n * 10).should == true }
@@ -6,7 +6,7 @@ describe Hamster::Set do
6
6
  let(:ruby) { File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"]) }
7
7
 
8
8
  let(:child_cmd) do
9
- %Q|#{ruby} -I lib -r hamster -e 'set = Hamster.set :one, :two; $stdout.write(Marshal.dump(set))'|
9
+ %Q|#{ruby} -I lib -r hamster -e 'set = Hamster::Set[:one, :two]; $stdout.write(Marshal.dump(set))'|
10
10
  end
11
11
 
12
12
  let(:reloaded_hash) do
@@ -18,7 +18,7 @@ describe Hamster::Set do
18
18
  end
19
19
 
20
20
  it "can survive dumping and loading into a new process" do
21
- reloaded_hash.should eql(Hamster.set(:one, :two))
21
+ reloaded_hash.should eql(S[:one, :two])
22
22
  end
23
23
 
24
24
  it "is still possible to test items by key after loading" do
@@ -2,35 +2,33 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set 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
- let(:set) { Hamster.set(*values) }
15
- let(:result) { set.send(method) { |maximum, item| maximum.length <=> item.length }}
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
+ let(:set) { S[*values] }
14
+ let(:result) { set.max { |maximum, item| maximum.length <=> item.length }}
16
15
 
17
- it "returns #{expected.inspect}" do
18
- result.should == expected
19
- end
16
+ it "returns #{expected.inspect}" do
17
+ result.should == expected
20
18
  end
21
19
  end
22
20
  end
21
+ end
23
22
 
24
- context "without a block" do
25
- [
26
- [[], nil],
27
- [["A"], "A"],
28
- [%w[Ichi Ni San], "San"],
29
- ].each do |values, expected|
30
- describe "on #{values.inspect}" do
31
- it "returns #{expected.inspect}" do
32
- Hamster.set(*values).send(method).should == expected
33
- end
23
+ context "without a block" do
24
+ [
25
+ [[], nil],
26
+ [["A"], "A"],
27
+ [%w[Ichi Ni San], "San"],
28
+ ].each do |values, expected|
29
+ describe "on #{values.inspect}" do
30
+ it "returns #{expected.inspect}" do
31
+ S[*values].max.should == expected
34
32
  end
35
33
  end
36
34
  end
@@ -2,35 +2,33 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set 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
- let(:set) { Hamster.set(*values) }
15
- let(:result) { set.send(method) { |minimum, item| minimum.length <=> item.length }}
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
+ let(:set) { S[*values] }
14
+ let(:result) { set.min { |minimum, item| minimum.length <=> item.length }}
16
15
 
17
- it "returns #{expected.inspect}" do
18
- result.should == expected
19
- end
16
+ it "returns #{expected.inspect}" do
17
+ result.should == expected
20
18
  end
21
19
  end
22
20
  end
21
+ end
23
22
 
24
- context "without a block" do
25
- [
26
- [[], nil],
27
- [["A"], "A"],
28
- [%w[Ichi Ni San], "Ichi"],
29
- ].each do |values, expected|
30
- describe "on #{values.inspect}" do
31
- it "returns #{expected.inspect}" do
32
- Hamster.set(*values).send(method).should == expected
33
- end
23
+ context "without a block" do
24
+ [
25
+ [[], nil],
26
+ [["A"], "A"],
27
+ [%w[Ichi Ni San], "Ichi"],
28
+ ].each do |values, expected|
29
+ describe "on #{values.inspect}" do
30
+ it "returns #{expected.inspect}" do
31
+ S[*values].min.should == expected
34
32
  end
35
33
  end
36
34
  end
@@ -4,22 +4,22 @@ require "hamster/set"
4
4
  describe Hamster::Set do
5
5
  describe ".new" do
6
6
  it "initializes a new set" do
7
- set = Hamster::Set.new([1,2,3])
7
+ set = S.new([1,2,3])
8
8
  set.size.should be(3)
9
9
  [1,2,3].each { |n| set.include?(n).should == true }
10
10
  end
11
11
 
12
12
  it "accepts a Range" do
13
- set = Hamster::Set.new(1..3)
13
+ set = S.new(1..3)
14
14
  set.size.should be(3)
15
15
  [1,2,3].each { |n| set.include?(n).should == true }
16
16
  end
17
17
 
18
18
  it "returns a Set which doesn't change even if the initializer is mutated" do
19
19
  array = [1,2,3]
20
- set = Hamster::Set.new([1,2,3])
20
+ set = S.new([1,2,3])
21
21
  array.push('BAD')
22
- set.should eql(Hamster.set(1,2,3))
22
+ set.should eql(S[1,2,3])
23
23
  end
24
24
 
25
25
  context "from a subclass" do
@@ -46,7 +46,7 @@ describe Hamster::Set do
46
46
 
47
47
  describe "[]" do
48
48
  it "accepts any number of arguments and initializes a new set" do
49
- set = Hamster::Set[1,2,3,4]
49
+ set = S[1,2,3,4]
50
50
  set.size.should be(4)
51
51
  [1,2,3,4].each { |n| set.include?(n).should == true }
52
52
  end
@@ -5,17 +5,17 @@ describe Hamster::Set do
5
5
  describe "#none?" do
6
6
  context "when empty" do
7
7
  it "with a block returns true" do
8
- Hamster.set.none? {}.should == true
8
+ S.empty.none? {}.should == true
9
9
  end
10
10
 
11
11
  it "with no block returns true" do
12
- Hamster.set.none?.should == true
12
+ S.empty.none?.should == true
13
13
  end
14
14
  end
15
15
 
16
16
  context "when not empty" do
17
17
  context "with a block" do
18
- let(:set) { Hamster.set("A", "B", "C", nil) }
18
+ let(:set) { S["A", "B", "C", nil] }
19
19
 
20
20
  ["A", "B", "C", nil].each do |value|
21
21
  it "returns false if the block ever returns true (#{value.inspect})" do
@@ -36,11 +36,11 @@ describe Hamster::Set do
36
36
 
37
37
  context "with no block" do
38
38
  it "returns false if any value is truthy" do
39
- Hamster.set(nil, false, true, "A").none?.should == false
39
+ S[nil, false, true, "A"].none?.should == false
40
40
  end
41
41
 
42
42
  it "returns true if all values are falsey" do
43
- Hamster.set(nil, false).none?.should == true
43
+ S[nil, false].none?.should == true
44
44
  end
45
45
  end
46
46
  end
@@ -5,17 +5,17 @@ describe Hamster::Set do
5
5
  describe "#one?" do
6
6
  context "when empty" do
7
7
  it "with a block returns false" do
8
- Hamster.set.one? {}.should == false
8
+ S.empty.one? {}.should == false
9
9
  end
10
10
 
11
11
  it "with no block returns false" do
12
- Hamster.set.one?.should == false
12
+ S.empty.one?.should == false
13
13
  end
14
14
  end
15
15
 
16
16
  context "when not empty" do
17
17
  context "with a block" do
18
- let(:set) { Hamster.set("A", "B", "C") }
18
+ let(:set) { S["A", "B", "C"] }
19
19
 
20
20
  it "returns false if the block returns true more than once" do
21
21
  set.one? { |item| true }.should == false
@@ -32,15 +32,15 @@ describe Hamster::Set do
32
32
 
33
33
  context "with no block" do
34
34
  it "returns false if more than one value is truthy" do
35
- Hamster.set(nil, true, "A").one?.should == false
35
+ S[nil, true, "A"].one?.should == false
36
36
  end
37
37
 
38
38
  it "returns true if only one value is truthy" do
39
- Hamster.set(nil, true, false).one?.should == true
39
+ S[nil, true, false].one?.should == true
40
40
  end
41
41
 
42
42
  it "returns false if no values are truthy" do
43
- Hamster.set(nil, false).one?.should == false
43
+ S[nil, false].one?.should == false
44
44
  end
45
45
  end
46
46
  end
@@ -14,7 +14,7 @@ describe Hamster::Set do
14
14
  [[4], [], [4]],
15
15
  ].each do |values, expected_matches, expected_remainder|
16
16
  context "on #{values.inspect}" do
17
- let(:set) { Hamster.set(*values) }
17
+ let(:set) { S[*values] }
18
18
 
19
19
  context "with a block" do
20
20
  let(:result) { set.partition(&:odd?) }
@@ -23,7 +23,7 @@ describe Hamster::Set do
23
23
 
24
24
  it "preserves the original" do
25
25
  result
26
- set.should eql(Hamster.set(*values))
26
+ set.should eql(S[*values])
27
27
  end
28
28
 
29
29
  it "returns a frozen array with two items" do
@@ -33,18 +33,18 @@ describe Hamster::Set do
33
33
  end
34
34
 
35
35
  it "correctly identifies the matches" do
36
- matches.should eql(Hamster.set(*expected_matches))
36
+ matches.should eql(S[*expected_matches])
37
37
  end
38
38
 
39
39
  it "correctly identifies the remainder" do
40
- remainder.should eql(Hamster.set(*expected_remainder))
40
+ remainder.should eql(S[*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
  set.partition.class.should be(Enumerator)
47
- set.partition.each(&:odd?).should eql([Hamster::Set.new(expected_matches), Hamster::Set.new(expected_remainder)])
47
+ set.partition.each(&:odd?).should eql([S.new(expected_matches), S.new(expected_remainder)])
48
48
  end
49
49
  end
50
50
  end
@@ -9,14 +9,14 @@ describe Hamster::Set do
9
9
  [[1, 3, 5, 7, 11], 1155],
10
10
  ].each do |values, expected|
11
11
  context "on #{values.inspect}" do
12
- let(:set) { Hamster.set(*values) }
12
+ let(:set) { S[*values] }
13
13
 
14
14
  it "returns #{expected.inspect}" do
15
15
  set.product.should == expected
16
16
  end
17
17
 
18
18
  it "doesn't change the original Set" do
19
- set.should eql(Hamster::Set.new(values))
19
+ set.should eql(S.new(values))
20
20
  end
21
21
  end
22
22
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:reduce, :inject, :fold, :foldr].each do |method|
5
+ [:reduce, :inject].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], 10, 10],
@@ -10,7 +10,7 @@ describe Hamster::Set do
10
10
  [[1, 2, 3], 10, 4],
11
11
  ].each do |values, initial, expected|
12
12
  describe "on #{values.inspect}" do
13
- let(:set) { Hamster.set(*values) }
13
+ let(:set) { S[*values] }
14
14
 
15
15
  context "with an initial value of #{initial}" do
16
16
  context "and a block" do
@@ -28,7 +28,7 @@ describe Hamster::Set do
28
28
  [[1, 2, 3], 6],
29
29
  ].each do |values, expected|
30
30
  describe "on #{values.inspect}" do
31
- let(:set) { Hamster.set(*values) }
31
+ let(:set) { S[*values] }
32
32
 
33
33
  context "with no initial value" do
34
34
  context "and a block" do
@@ -42,13 +42,13 @@ describe Hamster::Set do
42
42
 
43
43
  describe "with no block and a symbol argument" do
44
44
  it "uses the symbol as the name of a method to reduce with" do
45
- Hamster.set(1, 2, 3).reduce(:+).should == 6
45
+ S[1, 2, 3].reduce(:+).should == 6
46
46
  end
47
47
  end
48
48
 
49
49
  describe "with no block and a string argument" do
50
50
  it "uses the string as the name of a method to reduce with" do
51
- Hamster.set(1, 2, 3).reduce('+').should == 6
51
+ S[1, 2, 3].reduce('+').should == 6
52
52
  end
53
53
  end
54
54
  end
@@ -2,9 +2,9 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:remove, :reject, :delete_if].each do |method|
5
+ [:reject, :delete_if].each do |method|
6
6
  describe "##{method}" do
7
- let(:set) { Hamster.set("A", "B", "C") }
7
+ let(:set) { S["A", "B", "C"] }
8
8
 
9
9
  context "when nothing matches" do
10
10
  it "returns self" do
@@ -18,18 +18,18 @@ describe Hamster::Set do
18
18
 
19
19
  it "preserves the original" do
20
20
  result
21
- set.should eql(Hamster.set("A", "B", "C"))
21
+ set.should eql(S["A", "B", "C"])
22
22
  end
23
23
 
24
24
  it "returns a set with the matching values" do
25
- result.should eql(Hamster.set("B", "C"))
25
+ result.should eql(S["B", "C"])
26
26
  end
27
27
  end
28
28
 
29
29
  context "with no block" do
30
30
  it "returns self" do
31
31
  set.send(method).class.should be(Enumerator)
32
- set.send(method).each { |item| item == "A" }.should == Hamster.set("B", "C")
32
+ set.send(method).each { |item| item == "A" }.should == S["B", "C"]
33
33
  end
34
34
  end
35
35
  end
@@ -37,7 +37,7 @@ describe Hamster::Set do
37
37
  context "on a large set, with many combinations of input" do
38
38
  it "still works" do
39
39
  array = (1..1000).to_a
40
- set = Hamster::Set.new(array)
40
+ set = S.new(array)
41
41
  [0, 10, 100, 200, 500, 800, 900, 999, 1000].each do |threshold|
42
42
  result = set.send(method) { |item| item > threshold }
43
43
  result.size.should == threshold