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
@@ -6,11 +6,11 @@ describe Hamster::SortedSet do
6
6
  context "when called without a block" do
7
7
  it "returns a sorted set of all items from the first argument to the second" do
8
8
  100.times do
9
- items = rand(100).times.collect { rand(1000) }
10
- set = Hamster::SortedSet.new(items)
9
+ items = rand(100).times.collect { rand(1000) }
10
+ set = SS.new(items)
11
11
  from,to = [rand(1000),rand(1000)].sort
12
- result = set.between(from, to)
13
- array = items.select { |x| x >= from && x <= to }.sort
12
+ result = set.between(from, to)
13
+ array = items.select { |x| x >= from && x <= to }.sort
14
14
  result.class.should be(Hamster::SortedSet)
15
15
  result.size.should == array.size
16
16
  result.to_a.should == array
@@ -21,10 +21,10 @@ describe Hamster::SortedSet do
21
21
  context "when called with a block" do
22
22
  it "yields all the items lower than the argument" do
23
23
  100.times do
24
- items = rand(100).times.collect { rand(1000) }
25
- set = Hamster::SortedSet.new(items)
24
+ items = rand(100).times.collect { rand(1000) }
25
+ set = SS.new(items)
26
26
  from,to = [rand(1000),rand(1000)].sort
27
- result = []
27
+ result = []
28
28
  set.between(from, to) { |x| result << x }
29
29
  array = items.select { |x| x >= from && x <= to }.sort
30
30
  result.size.should == array.size
@@ -35,15 +35,15 @@ describe Hamster::SortedSet do
35
35
 
36
36
  context "on an empty set" do
37
37
  it "returns an empty set" do
38
- Hamster::SortedSet.empty.between(1, 2).should be_empty
39
- Hamster::SortedSet.empty.between('abc', 'def').should be_empty
40
- Hamster::SortedSet.empty.between(:symbol, :another).should be_empty
38
+ SS.empty.between(1, 2).should be_empty
39
+ SS.empty.between('abc', 'def').should be_empty
40
+ SS.empty.between(:symbol, :another).should be_empty
41
41
  end
42
42
  end
43
43
 
44
44
  context "with a 'to' argument lower than the 'from' argument" do
45
45
  it "returns an empty set" do
46
- result = Hamster.sorted_set(*(1..100)).between(6, 5)
46
+ result = SS.new(1..100).between(6, 5)
47
47
  result.class.should be(Hamster::SortedSet)
48
48
  result.should be_empty
49
49
  end
@@ -9,11 +9,11 @@ describe Hamster::SortedSet do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  context "on #{values}" do
12
- let(:sorted_set) { Hamster.sorted_set(*values) }
12
+ let(:sorted_set) { SS[*values] }
13
13
 
14
14
  it "preserves the original" do
15
15
  sorted_set.clear
16
- sorted_set.should eql(Hamster.sorted_set(*values))
16
+ sorted_set.should eql(SS[*values])
17
17
  end
18
18
 
19
19
  it "returns an empty set" do
@@ -31,5 +31,14 @@ describe Hamster::SortedSet do
31
31
  instance.clear.should be_empty
32
32
  end
33
33
  end
34
+
35
+ context "with a comparator" do
36
+ let(:sorted_set) { SS.new([1, 2, 3]) { |x| -x } }
37
+ it "returns an empty instance with same comparator" do
38
+ e = sorted_set.clear
39
+ e.should be_empty
40
+ e.add(4).add(5).add(6).to_a.should == [6, 5, 4]
41
+ end
42
+ end
34
43
  end
35
44
  end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+ require "hamster/sorted_set"
3
+
4
+ describe Hamster::SortedSet do
5
+ [:dup, :clone].each do |method|
6
+ [
7
+ [],
8
+ ["A"],
9
+ %w[A B C],
10
+ (1..32),
11
+ ].each do |values|
12
+ describe "on #{values.inspect}" do
13
+ let(:sorted_set) { SS[*values] }
14
+
15
+ it "returns self" do
16
+ sorted_set.send(method).should equal(sorted_set)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -3,12 +3,12 @@ require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
5
  describe "#delete_at" do
6
- let(:sorted_set) { Hamster.sorted_set(1,2,3,4,5) }
6
+ let(:sorted_set) { SS[1,2,3,4,5] }
7
7
 
8
8
  it "removes the element at the specified index" do
9
- sorted_set.delete_at(0).should eql(Hamster.sorted_set(2,3,4,5))
10
- sorted_set.delete_at(2).should eql(Hamster.sorted_set(1,2,4,5))
11
- sorted_set.delete_at(-1).should eql(Hamster.sorted_set(1,2,3,4))
9
+ sorted_set.delete_at(0).should eql(SS[2,3,4,5])
10
+ sorted_set.delete_at(2).should eql(SS[1,2,4,5])
11
+ sorted_set.delete_at(-1).should eql(SS[1,2,3,4])
12
12
  end
13
13
 
14
14
  it "makes no modification if the index is out of range" do
@@ -2,30 +2,30 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- let(:sorted_set) { Hamster.sorted_set("A", "B", "C") }
5
+ let(:sorted_set) { SS["A", "B", "C"] }
6
6
 
7
7
  describe "#delete" do
8
8
  context "on an empty set" do
9
9
  it "returns an empty set" do
10
- Hamster::EmptySortedSet.delete(0).should be(Hamster::EmptySortedSet)
10
+ SS.empty.delete(0).should be(SS.empty)
11
11
  end
12
12
  end
13
13
 
14
14
  context "with an existing value" do
15
15
  it "preserves the original" do
16
16
  sorted_set.delete("B")
17
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
17
+ sorted_set.should eql(SS["A", "B", "C"])
18
18
  end
19
19
 
20
20
  it "returns a copy with the remaining of values" do
21
- sorted_set.delete("B").should eql(Hamster.sorted_set("A", "C"))
21
+ sorted_set.delete("B").should eql(SS["A", "C"])
22
22
  end
23
23
  end
24
24
 
25
25
  context "with a non-existing value" do
26
26
  it "preserves the original values" do
27
27
  sorted_set.delete("D")
28
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
28
+ sorted_set.should eql(SS["A", "B", "C"])
29
29
  end
30
30
 
31
31
  it "returns self" do
@@ -34,8 +34,17 @@ describe Hamster::SortedSet do
34
34
  end
35
35
 
36
36
  context "when removing the last value in a sorted set" do
37
- it "returns the canonical empty set" do
38
- sorted_set.delete("B").delete("C").delete("A").should be(Hamster::EmptySortedSet)
37
+ it "maintains the set order" do
38
+ ss = SS.new(["peanuts", "jam", "milk"]) { |word| word.length }
39
+ ss = ss.delete("jam").delete("peanuts").delete("milk")
40
+ ss = ss.add("banana").add("sugar").add("spam")
41
+ ss.to_a.should == ['spam', 'sugar', 'banana']
42
+ end
43
+
44
+ context "when the set is in natural order" do
45
+ it "returns the canonical empty set" do
46
+ sorted_set.delete("B").delete("C").delete("A").should be(Hamster::EmptySortedSet)
47
+ end
39
48
  end
40
49
  end
41
50
 
@@ -45,9 +54,9 @@ describe Hamster::SortedSet do
45
54
  expected = to_delete.reduce(values.dup) { |ary,val| ary.delete(val); ary }
46
55
  describe "on #{values.inspect}, when deleting #{to_delete.inspect}" do
47
56
  it "returns #{expected.inspect}" do
48
- set = Hamster::SortedSet.new(values)
57
+ set = SS.new(values)
49
58
  result = to_delete.reduce(set) { |s,val| s.delete(val) }
50
- result.should eql(Hamster::SortedSet.new(expected))
59
+ result.should eql(SS.new(expected))
51
60
  result.to_a.should eql(expected)
52
61
  end
53
62
  end
@@ -59,18 +68,18 @@ describe Hamster::SortedSet do
59
68
  context "with an existing value" do
60
69
  it "preserves the original" do
61
70
  sorted_set.delete?("B")
62
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
71
+ sorted_set.should eql(SS["A", "B", "C"])
63
72
  end
64
73
 
65
74
  it "returns a copy with the remaining values" do
66
- sorted_set.delete?("B").should eql(Hamster.sorted_set("A", "C"))
75
+ sorted_set.delete?("B").should eql(SS["A", "C"])
67
76
  end
68
77
  end
69
78
 
70
79
  context "with a non-existing value" do
71
80
  it "preserves the original values" do
72
81
  sorted_set.delete?("D")
73
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
82
+ sorted_set.should eql(SS["A", "B", "C"])
74
83
  end
75
84
 
76
85
  it "returns false" do
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:difference, :diff, :subtract, :-].each do |method|
5
+ [:difference, :subtract, :-].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], [], []],
@@ -14,7 +14,7 @@ describe Hamster::SortedSet do
14
14
  ].each do |a, b, expected|
15
15
  context "for #{a.inspect} and #{b.inspect}" do
16
16
  it "returns #{expected.inspect}" do
17
- Hamster.sorted_set(*a).send(method, Hamster.sorted_set(*b)).should eql(Hamster.sorted_set(*expected))
17
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
18
18
  end
19
19
  end
20
20
  end
@@ -18,7 +18,7 @@ describe Hamster::SortedSet do
18
18
  ].each do |a, b, expected|
19
19
  context "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.sorted_set(*a).disjoint?(Hamster.sorted_set(*b)).should be(expected)
21
+ SS[*a].disjoint?(SS[*b]).should be(expected)
22
22
  end
23
23
  end
24
24
  end
@@ -13,17 +13,44 @@ describe Hamster::SortedSet do
13
13
  [%w[A B C], 3, []]
14
14
  ].each do |values, number, expected|
15
15
  context "#{number} from #{values.inspect}" do
16
- let(:sorted_set) { Hamster.sorted_set(*values) }
16
+ let(:sorted_set) { SS[*values] }
17
17
 
18
18
  it "preserves the original" do
19
19
  sorted_set.drop(number)
20
- sorted_set.should eql(Hamster.sorted_set(*values))
20
+ sorted_set.should eql(SS[*values])
21
21
  end
22
22
 
23
23
  it "returns #{expected.inspect}" do
24
- sorted_set.drop(number).should eql(Hamster.sorted_set(*expected))
24
+ sorted_set.drop(number).should eql(SS[*expected])
25
25
  end
26
26
  end
27
27
  end
28
+
29
+ context "when argument is zero" do
30
+ let(:sorted_set) { SS[6, 7, 8, 9] }
31
+ it "returns self" do
32
+ sorted_set.drop(0).should be(sorted_set)
33
+ end
34
+ end
35
+
36
+ context "when the set has a custom order" do
37
+ let(:sorted_set) { SS.new([1, 2, 3]) { |x| -x }}
38
+ it "maintains the custom order" do
39
+ sorted_set.drop(1).to_a.should == [2, 1]
40
+ sorted_set.drop(2).to_a.should == [1]
41
+ end
42
+
43
+ it "keeps the comparator even when set is cleared" do
44
+ s = sorted_set.drop(3)
45
+ s.add(4).add(5).add(6).to_a.should == [6, 5, 4]
46
+ end
47
+ end
48
+
49
+ context "when called on a subclass" do
50
+ it "should return an instance of the subclass" do
51
+ subclass = Class.new(Hamster::SortedSet)
52
+ subclass.new([1,2,3]).drop(1).class.should be(subclass)
53
+ end
54
+ end
28
55
  end
29
56
  end
@@ -10,23 +10,23 @@ describe Hamster::SortedSet do
10
10
  [%w[A B C D E F G], %w[C D E F G]]
11
11
  ].each do |values, expected|
12
12
  context "on #{values.inspect}" do
13
- let(:sorted_set) { Hamster.sorted_set(*values) }
13
+ let(:sorted_set) { SS[*values] }
14
14
 
15
15
  context "with a block" do
16
16
  it "preserves the original" do
17
17
  sorted_set.drop_while { |item| item < "C" }
18
- sorted_set.should eql(Hamster.sorted_set(*values))
18
+ sorted_set.should eql(SS[*values])
19
19
  end
20
20
 
21
21
  it "returns #{expected.inspect}" do
22
- sorted_set.drop_while { |item| item < "C" }.should eql(Hamster.sorted_set(*expected))
22
+ sorted_set.drop_while { |item| item < "C" }.should eql(SS[*expected])
23
23
  end
24
24
  end
25
25
 
26
26
  context "without a block" do
27
27
  it "returns an Enumerator" do
28
28
  sorted_set.drop_while.class.should be(Enumerator)
29
- sorted_set.drop_while.each { |item| item < "C" }.should eql(Hamster.sorted_set(*expected))
29
+ sorted_set.drop_while.each { |item| item < "C" }.should eql(SS[*expected])
30
30
  end
31
31
  end
32
32
  end
@@ -2,29 +2,27 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:each, :foreach].each do |method|
6
- describe "##{method}" do
7
- context "with no block" do
8
- let(:sorted_set) { Hamster.sorted_set("A", "B", "C") }
5
+ describe "#each" do
6
+ context "with no block" do
7
+ let(:sorted_set) { SS["A", "B", "C"] }
9
8
 
10
- it "returns an Enumerator" do
11
- sorted_set.send(method).class.should be(Enumerator)
12
- sorted_set.send(method).to_a.should eql(sorted_set.to_a)
13
- end
9
+ it "returns an Enumerator" do
10
+ sorted_set.each.class.should be(Enumerator)
11
+ sorted_set.each.to_a.should eql(sorted_set.to_a)
14
12
  end
13
+ end
15
14
 
16
- context "with a block" do
17
- let(:sorted_set) { Hamster::SortedSet.new((1..1025).to_a.reverse) }
15
+ context "with a block" do
16
+ let(:sorted_set) { SS.new((1..1025).to_a.reverse) }
18
17
 
19
- it "returns self" do
20
- sorted_set.send(method) {}.should be(sorted_set)
21
- end
18
+ it "returns self" do
19
+ sorted_set.each {}.should be(sorted_set)
20
+ end
22
21
 
23
- it "iterates over the items in order" do
24
- items = []
25
- sorted_set.send(method) { |item| items << item }
26
- items.should == (1..1025).to_a
27
- end
22
+ it "iterates over the items in order" do
23
+ items = []
24
+ sorted_set.each { |item| items << item }
25
+ items.should == (1..1025).to_a
28
26
  end
29
27
  end
30
28
  end
@@ -2,19 +2,17 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:empty?, :null?].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], true],
9
- [["A"], false],
10
- [%w[A B C], false],
11
- ].each do |values, expected|
12
- context "on #{values.inspect}" do
13
- let(:sorted_set) { Hamster.sorted_set(*values) }
5
+ describe "#empty?" do
6
+ [
7
+ [[], true],
8
+ [["A"], false],
9
+ [%w[A B C], false],
10
+ ].each do |values, expected|
11
+ context "on #{values.inspect}" do
12
+ let(:sorted_set) { SS[*values] }
14
13
 
15
- it "returns #{expected.inspect}" do
16
- sorted_set.send(method).should == expected
17
- end
14
+ it "returns #{expected.inspect}" do
15
+ sorted_set.empty?.should == expected
18
16
  end
19
17
  end
20
18
  end
@@ -22,8 +20,8 @@ describe Hamster::SortedSet do
22
20
 
23
21
  describe ".empty" do
24
22
  it "returns the canonical empty set" do
25
- Hamster::SortedSet.empty.size.should be(0)
26
- Hamster::SortedSet.empty.object_id.should be(Hamster::SortedSet.empty.object_id)
23
+ SS.empty.size.should be(0)
24
+ SS.empty.object_id.should be(SS.empty.object_id)
27
25
  end
28
26
 
29
27
  context "from a subclass" do
@@ -3,8 +3,8 @@ require "set"
3
3
  require "hamster/set"
4
4
 
5
5
  describe Hamster::SortedSet do
6
- let(:set) { Hamster.sorted_set(*values) }
7
- let(:comparison) { Hamster.sorted_set(*comparison_values) }
6
+ let(:set) { SS[*values] }
7
+ let(:comparison) { SS[*comparison_values] }
8
8
 
9
9
  describe "#eql?" do
10
10
  let(:eql?) { set.eql?(comparison) }
@@ -18,7 +18,7 @@ describe Hamster::SortedSet do
18
18
  end
19
19
 
20
20
  context "when comparing to a standard set" do
21
- let(:comparison) { Set.new(%w[A B C]) }
21
+ let(:comparison) { ::Set.new(%w[A B C]) }
22
22
  include_examples "comparing something which is not a sorted set"
23
23
  end
24
24
 
@@ -110,8 +110,8 @@ describe Hamster::SortedSet do
110
110
  end
111
111
 
112
112
  context "with the same values, but a different sort order" do
113
- let(:set) { Hamster.sorted_set(1, 2, 3) }
114
- let(:comparison) { Hamster.sorted_set(1, 2, 3) { |n| -n }}
113
+ let(:set) { SS[1, 2, 3] }
114
+ let(:comparison) { SS.new([1, 2, 3]) { |n| -n }}
115
115
 
116
116
  it "returns false" do
117
117
  expect(eql?).to eq(false)
@@ -14,7 +14,7 @@ describe Hamster::SortedSet do
14
14
  ].each do |a, b, expected|
15
15
  context "for #{a.inspect} and #{b.inspect}" do
16
16
  it "returns #{expected.inspect}" do
17
- Hamster.sorted_set(*a).send(method, Hamster.sorted_set(*b)).should eql(Hamster.sorted_set(*expected))
17
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
18
18
  end
19
19
  end
20
20
  end
@@ -3,7 +3,7 @@ require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
5
  describe "#fetch" do
6
- let(:sorted_set) { Hamster.sorted_set('a', 'b', 'c') }
6
+ let(:sorted_set) { SS['a', 'b', 'c'] }
7
7
 
8
8
  context "with no default provided" do
9
9
  context "when the index exists" do