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/set"
3
3
 
4
4
  describe Hamster::Set do
5
- let(:original) { Hamster.set("A", "B", "C") }
5
+ let(:original) { S["A", "B", "C"] }
6
6
 
7
7
  [:add, :<<].each do |method|
8
8
  describe "##{method}" do
@@ -11,11 +11,11 @@ describe Hamster::Set do
11
11
 
12
12
  it "preserves the original" do
13
13
  result
14
- original.should eql(Hamster.set("A", "B", "C"))
14
+ original.should eql(S["A", "B", "C"])
15
15
  end
16
16
 
17
17
  it "returns a copy with the superset of values" do
18
- result.should eql(Hamster.set("A", "B", "C", "D"))
18
+ result.should eql(S["A", "B", "C", "D"])
19
19
  end
20
20
  end
21
21
 
@@ -24,7 +24,7 @@ describe Hamster::Set do
24
24
 
25
25
  it "preserves the original values" do
26
26
  result
27
- original.should eql(Hamster.set("A", "B", "C"))
27
+ original.should eql(S["A", "B", "C"])
28
28
  end
29
29
 
30
30
  it "returns self" do
@@ -33,15 +33,17 @@ describe Hamster::Set do
33
33
  end
34
34
 
35
35
  it "can add nil to a set" do
36
- original.add(nil).should eql(Hamster.set("A", "B", "C", nil))
36
+ original.add(nil).should eql(S["A", "B", "C", nil])
37
37
  end
38
38
 
39
39
  it "works on large sets, with many combinations of input" do
40
40
  50.times do
41
- array = (1..500).to_a.sample(100)
42
- set = Hamster::Set.new(array)
41
+ # Array#sample is buggy on RBX 2.5.8; that's why #uniq is needed here
42
+ # See https://github.com/rubinius/rubinius/issues/3506
43
+ array = (1..500).to_a.sample(100).uniq
44
+ set = S.new(array)
43
45
  to_add = 1000 + rand(1000)
44
- set.add(to_add).size.should == 101
46
+ set.add(to_add).size.should == array.size + 1
45
47
  set.add(to_add).include?(to_add).should == true
46
48
  end
47
49
  end
@@ -53,11 +55,11 @@ describe Hamster::Set do
53
55
  let(:result) { original.add?("D") }
54
56
 
55
57
  it "preserves the original" do
56
- original.should eql(Hamster.set("A", "B", "C"))
58
+ original.should eql(S["A", "B", "C"])
57
59
  end
58
60
 
59
61
  it "returns a copy with the superset of values" do
60
- result.should eql(Hamster.set("A", "B", "C", "D"))
62
+ result.should eql(S["A", "B", "C", "D"])
61
63
  end
62
64
  end
63
65
 
@@ -65,7 +67,7 @@ describe Hamster::Set do
65
67
  let(:result) { original.add?("C") }
66
68
 
67
69
  it "preserves the original values" do
68
- original.should eql(Hamster.set("A", "B", "C"))
70
+ original.should eql(S["A", "B", "C"])
69
71
  end
70
72
 
71
73
  it "returns false" do
@@ -2,50 +2,48 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:all?, :forall?].each do |method|
6
- describe "##{method}" do
7
- context "when empty" do
8
- it "with a block returns true" do
9
- Hamster.set.send(method) {}.should == true
10
- end
5
+ describe "#all?" do
6
+ context "when empty" do
7
+ it "with a block returns true" do
8
+ S.empty.all? {}.should == true
9
+ end
11
10
 
12
- it "with no block returns true" do
13
- Hamster.set.send(method).should == true
14
- end
11
+ it "with no block returns true" do
12
+ S.empty.all?.should == true
15
13
  end
14
+ end
16
15
 
17
- context "when not empty" do
18
- context "with a block" do
19
- let(:set) { Hamster.set("A", "B", "C") }
16
+ context "when not empty" do
17
+ context "with a block" do
18
+ let(:set) { S["A", "B", "C"] }
20
19
 
21
- it "returns true if the block always returns true" do
22
- set.send(method) { |item| true }.should == true
23
- end
20
+ it "returns true if the block always returns true" do
21
+ set.all? { |item| true }.should == true
22
+ end
24
23
 
25
- it "returns false if the block ever returns false" do
26
- set.send(method) { |item| item == "D" }.should == false
27
- end
24
+ it "returns false if the block ever returns false" do
25
+ set.all? { |item| item == "D" }.should == false
26
+ end
28
27
 
29
- it "propagates an exception from the block" do
30
- -> { set.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
31
- end
28
+ it "propagates an exception from the block" do
29
+ -> { set.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
30
+ end
32
31
 
33
- it "stops iterating as soon as the block returns false" do
34
- yielded = []
35
- set.all? { |k,v| yielded << k; false }
36
- yielded.size.should == 1
37
- end
32
+ it "stops iterating as soon as the block returns false" do
33
+ yielded = []
34
+ set.all? { |k,v| yielded << k; false }
35
+ yielded.size.should == 1
38
36
  end
37
+ end
39
38
 
40
- describe "with no block" do
41
- it "returns true if all values are truthy" do
42
- Hamster.set(true, "A").send(method).should == true
43
- end
39
+ describe "with no block" do
40
+ it "returns true if all values are truthy" do
41
+ S[true, "A"].all?.should == true
42
+ end
44
43
 
45
- [nil, false].each do |value|
46
- it "returns false if any value is #{value.inspect}" do
47
- Hamster.set(value, true, "A").send(method).should == false
48
- end
44
+ [nil, false].each do |value|
45
+ it "returns false if any value is #{value.inspect}" do
46
+ S[value, true, "A"].all?.should == false
49
47
  end
50
48
  end
51
49
  end
@@ -2,51 +2,49 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:any?, :exist?, :exists?].each do |method|
6
- describe "##{method}" do
7
- context "when empty" do
8
- it "with a block returns false" do
9
- Hamster.set.send(method) {}.should == false
10
- end
5
+ describe "#any?" do
6
+ context "when empty" do
7
+ it "with a block returns false" do
8
+ S.empty.any? {}.should == false
9
+ end
11
10
 
12
- it "with no block returns false" do
13
- Hamster.set.send(method).should == false
14
- end
11
+ it "with no block returns false" do
12
+ S.empty.any?.should == false
15
13
  end
14
+ end
16
15
 
17
- context "when not empty" do
18
- context "with a block" do
19
- let(:set) { Hamster.set("A", "B", "C", nil) }
16
+ context "when not empty" do
17
+ context "with a block" do
18
+ let(:set) { S["A", "B", "C", nil] }
20
19
 
21
- ["A", "B", "C", nil].each do |value|
22
- it "returns true if the block ever returns true (#{value.inspect})" do
23
- set.send(method) { |item| item == value }.should == true
24
- end
20
+ ["A", "B", "C", nil].each do |value|
21
+ it "returns true if the block ever returns true (#{value.inspect})" do
22
+ set.any? { |item| item == value }.should == true
25
23
  end
24
+ end
26
25
 
27
- it "returns false if the block always returns false" do
28
- set.send(method) { |item| item == "D" }.should == false
29
- end
26
+ it "returns false if the block always returns false" do
27
+ set.any? { |item| item == "D" }.should == false
28
+ end
30
29
 
31
- it "propagates exceptions raised in the block" do
32
- -> { set.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
33
- end
30
+ it "propagates exceptions raised in the block" do
31
+ -> { set.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
32
+ end
34
33
 
35
- it "stops iterating as soon as the block returns true" do
36
- yielded = []
37
- set.any? { |k,v| yielded << k; true }
38
- yielded.size.should == 1
39
- end
34
+ it "stops iterating as soon as the block returns true" do
35
+ yielded = []
36
+ set.any? { |k,v| yielded << k; true }
37
+ yielded.size.should == 1
40
38
  end
39
+ end
41
40
 
42
- context "with no block" do
43
- it "returns true if any value is truthy" do
44
- Hamster.set(nil, false, true, "A").send(method).should == true
45
- end
41
+ context "with no block" do
42
+ it "returns true if any value is truthy" do
43
+ S[nil, false, true, "A"].any?.should == true
44
+ end
46
45
 
47
- it "returns false if all values are falsey" do
48
- Hamster.set(nil, false).send(method).should == false
49
- end
46
+ it "returns false if all values are falsey" do
47
+ S[nil, false].any?.should == false
50
48
  end
51
49
  end
52
50
  end
@@ -9,15 +9,15 @@ describe Hamster::Set do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  describe "on #{values}" do
12
- let(:set) { Hamster.set(*values) }
12
+ let(:set) { S[*values] }
13
13
 
14
14
  it "preserves the original" do
15
15
  set.clear
16
- set.should eql(Hamster.set(*values))
16
+ set.should eql(S[*values])
17
17
  end
18
18
 
19
19
  it "returns an empty set" do
20
- set.clear.should equal(Hamster.set)
20
+ set.clear.should equal(S.empty)
21
21
  end
22
22
  end
23
23
  end
@@ -15,15 +15,15 @@ describe Hamster::Set do
15
15
  [[nil, "B", nil], ["B"]],
16
16
  ].each do |values, expected|
17
17
  describe "on #{values.inspect}" do
18
- let(:set) { Hamster.set(*values) }
18
+ let(:set) { S[*values] }
19
19
 
20
20
  it "preserves the original" do
21
21
  set.compact
22
- set.should eql(Hamster.set(*values))
22
+ set.should eql(S[*values])
23
23
  end
24
24
 
25
25
  it "returns #{expected.inspect}" do
26
- set.compact.should eql(Hamster.set(*expected))
26
+ set.compact.should eql(S[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -5,14 +5,14 @@ describe Hamster::Set do
5
5
  describe ".set" do
6
6
  context "with no values" do
7
7
  it "returns the empty set" do
8
- Hamster.set.should be_empty
9
- Hamster.set.should equal(Hamster::EmptySet)
8
+ S.empty.should be_empty
9
+ S.empty.should equal(Hamster::EmptySet)
10
10
  end
11
11
  end
12
12
 
13
13
  context "with a list of values" do
14
14
  it "is equivalent to repeatedly using #add" do
15
- Hamster.set("A", "B", "C").should eql(Hamster.set.add("A").add("B").add("C"))
15
+ S["A", "B", "C"].should eql(S.empty.add("A").add("B").add("C"))
16
16
  end
17
17
  end
18
18
  end
@@ -3,7 +3,7 @@ require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
5
  [:dup, :clone].each do |method|
6
- let(:set) { Hamster.set("A", "B", "C") }
6
+ let(:set) { S["A", "B", "C"] }
7
7
 
8
8
  describe "##{method}" do
9
9
  it "returns self" do
@@ -12,7 +12,7 @@ describe Hamster::Set do
12
12
  [[1, 2, 3, 4, 5], 3],
13
13
  ].each do |values, expected|
14
14
  describe "on #{values.inspect}" do
15
- let(:set) { Hamster.set(*values) }
15
+ let(:set) { S[*values] }
16
16
 
17
17
  context "with a block" do
18
18
  it "returns #{expected.inspect}" do
@@ -2,24 +2,24 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- let(:set) { Hamster.set("A", "B", "C") }
5
+ let(:set) { S["A", "B", "C"] }
6
6
 
7
7
  describe "#delete" do
8
8
  context "with an existing value" do
9
9
  it "preserves the original" do
10
10
  set.delete("B")
11
- set.should eql(Hamster.set("A", "B", "C"))
11
+ set.should eql(S["A", "B", "C"])
12
12
  end
13
13
 
14
14
  it "returns a copy with the remaining values" do
15
- set.delete("B").should eql(Hamster.set("A", "C"))
15
+ set.delete("B").should eql(S["A", "C"])
16
16
  end
17
17
  end
18
18
 
19
19
  context "with a non-existing value" do
20
20
  it "preserves the original values" do
21
21
  set.delete("D")
22
- set.should eql(Hamster.set("A", "B", "C"))
22
+ set.should eql(S["A", "B", "C"])
23
23
  end
24
24
 
25
25
  it "returns self" do
@@ -35,7 +35,7 @@ describe Hamster::Set do
35
35
 
36
36
  it "works on large sets, with many combinations of input" do
37
37
  array = 1000.times.map { %w[a b c d e f g h i j k l m n].sample(5).join }.uniq
38
- set = Hamster::Set.new(array)
38
+ set = S.new(array)
39
39
  array.each do |key|
40
40
  result = set.delete(key)
41
41
  result.size.should == set.size - 1
@@ -50,18 +50,18 @@ describe Hamster::Set do
50
50
  context "with an existing value" do
51
51
  it "preserves the original" do
52
52
  set.delete?("B")
53
- set.should eql(Hamster.set("A", "B", "C"))
53
+ set.should eql(S["A", "B", "C"])
54
54
  end
55
55
 
56
56
  it "returns a copy with the remaining values" do
57
- set.delete?("B").should eql(Hamster.set("A", "C"))
57
+ set.delete?("B").should eql(S["A", "C"])
58
58
  end
59
59
  end
60
60
 
61
61
  context "with a non-existing value" do
62
62
  it "preserves the original values" do
63
63
  set.delete?("D")
64
- set.should eql(Hamster.set("A", "B", "C"))
64
+ set.should eql(S["A", "B", "C"])
65
65
  end
66
66
 
67
67
  it "returns false" do
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:difference, :diff, :subtract, :-].each do |method|
5
+ [:difference, :subtract, :-].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], [], []],
@@ -14,24 +14,24 @@ describe Hamster::Set do
14
14
  [%w[A B C M X Y Z], %w[B C D E F G H I J X], %w[A M Y Z]]
15
15
  ].each do |a, b, expected|
16
16
  context "for #{a.inspect} and #{b.inspect}" do
17
- let(:set_a) { Hamster.set(*a) }
18
- let(:set_b) { Hamster.set(*b) }
17
+ let(:set_a) { S[*a] }
18
+ let(:set_b) { S[*b] }
19
19
  let(:result) { set_a.send(method, set_b) }
20
20
 
21
21
  it "doesn't modify the original Sets" do
22
22
  result
23
- set_a.should eql(Hamster::Set.new(a))
24
- set_b.should eql(Hamster::Set.new(b))
23
+ set_a.should eql(S.new(a))
24
+ set_b.should eql(S.new(b))
25
25
  end
26
26
 
27
27
  it "returns #{expected.inspect}" do
28
- result.should eql(Hamster.set(*expected))
28
+ result.should eql(S[*expected])
29
29
  end
30
30
  end
31
31
 
32
32
  context "when passed a Ruby Array" do
33
33
  it "returns the expected Set" do
34
- Hamster.set(*a).difference(b.freeze).should eql(Hamster.set(*expected))
34
+ S[*a].difference(b.freeze).should eql(S[*expected])
35
35
  end
36
36
  end
37
37
  end
@@ -41,7 +41,7 @@ describe Hamster::Set do
41
41
  50.times do
42
42
  array1 = items.sample(200)
43
43
  array2 = items.sample(200)
44
- result = Hamster::Set.new(array1).send(method, Hamster::Set.new(array2))
44
+ result = S.new(array1).send(method, S.new(array2))
45
45
  result.to_a.sort.should eql((array1 - array2).sort)
46
46
  end
47
47
  end
@@ -18,7 +18,7 @@ describe Hamster::Set do
18
18
  ].each do |a, b, expected|
19
19
  describe "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.set(*a).disjoint?(Hamster.set(*b)).should be(expected)
21
+ S[*a].disjoint?(S[*b]).should be(expected)
22
22
  end
23
23
  end
24
24
  end
@@ -3,7 +3,7 @@ require "set"
3
3
  require "hamster/set"
4
4
 
5
5
  describe Hamster::Set do
6
- let(:set) { Hamster.set("A", "B", "C") }
6
+ let(:set) { S["A", "B", "C"] }
7
7
 
8
8
  describe "#each" do
9
9
  let(:each) { set.each(&block) }
@@ -37,7 +37,7 @@ describe Hamster::Set do
37
37
  end
38
38
 
39
39
  it "yields both of a pair of colliding keys" do
40
- set = Hamster::Set[DeterministicHash.new('a', 1010), DeterministicHash.new('b', 1010)]
40
+ set = S[DeterministicHash.new('a', 1010), DeterministicHash.new('b', 1010)]
41
41
  yielded = []
42
42
  set.each { |obj| yielded << obj }
43
43
  yielded.map(&:value).sort.should == ['a', 'b']