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
@@ -16,11 +16,11 @@ describe Hamster::List do
16
16
  [%w[A B C], "A|B|C"]
17
17
  ].each do |values, expected|
18
18
  context "on #{values.inspect}" do
19
- let(:list) { Hamster.list(*values) }
19
+ let(:list) { L[*values] }
20
20
 
21
21
  it "preserves the original" do
22
22
  list.join("|")
23
- list.should eql(Hamster.list(*values))
23
+ list.should eql(L[*values])
24
24
  end
25
25
 
26
26
  it "returns #{expected.inspect}" do
@@ -37,11 +37,11 @@ describe Hamster::List do
37
37
  [%w[A B C], "ABC"]
38
38
  ].each do |values, expected|
39
39
  context "on #{values.inspect}" do
40
- let(:list) { Hamster.list(*values) }
40
+ let(:list) { L[*values] }
41
41
 
42
42
  it "preserves the original" do
43
43
  list.join
44
- list.should eql(Hamster.list(*values))
44
+ list.should eql(L[*values])
45
45
  end
46
46
 
47
47
  it "returns #{expected.inspect}" do
@@ -53,7 +53,7 @@ describe Hamster::List do
53
53
 
54
54
  context "without a separator (with global default separator set)" do
55
55
  before { $, = '**' }
56
- let(:list) { Hamster.list("A", "B", "C") }
56
+ let(:list) { L["A", "B", "C"] }
57
57
  after { $, = nil }
58
58
 
59
59
  it "uses the default global separator" do
@@ -16,7 +16,7 @@ describe Hamster::List do
16
16
  ].each do |values, expected|
17
17
  context "on #{values.inspect}" do
18
18
  it "returns #{expected.inspect}" do
19
- Hamster.list(*values).last.should == expected
19
+ L[*values].last.should == expected
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+ require "hamster/list"
3
+
4
+ describe Hamster::List do
5
+ describe "#<<" do
6
+ it "adds an item onto the end of a list" do
7
+ list = L["a", "b"]
8
+ (list << "c").should eql(L["a", "b", "c"])
9
+ list.should eql(L["a", "b"])
10
+ end
11
+
12
+ context "on an empty list" do
13
+ it "returns a list with one item" do
14
+ list = L.empty
15
+ (list << "c").should eql(L["c"])
16
+ list.should eql(L.empty)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -14,16 +14,16 @@ describe Hamster::List do
14
14
  [%w[A B C], %w[a b c]],
15
15
  ].each do |values, expected|
16
16
  context "on #{values.inspect}" do
17
- let(:list) { Hamster.list(*values) }
17
+ let(:list) { L[*values] }
18
18
 
19
19
  context "with a block" do
20
20
  it "preserves the original" do
21
21
  list.send(method, &:downcase)
22
- list.should eql(Hamster.list(*values))
22
+ list.should eql(L[*values])
23
23
  end
24
24
 
25
25
  it "returns #{expected.inspect}" do
26
- list.send(method, &:downcase).should eql(Hamster.list(*expected))
26
+ list.send(method, &:downcase).should eql(L[*expected])
27
27
  end
28
28
 
29
29
  it "is lazy" do
@@ -36,7 +36,7 @@ describe Hamster::List do
36
36
  context "without a block" do
37
37
  it "returns an Enumerator" do
38
38
  list.send(method).class.should be(Enumerator)
39
- list.send(method).each(&:downcase).should eql(Hamster.list(*expected))
39
+ list.send(method).each(&:downcase).should eql(L[*expected])
40
40
  end
41
41
  end
42
42
  end
@@ -2,38 +2,36 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:maximum, :max].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- it "doesn't run out of stack" do
9
- -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).send(method) }.should_not raise_error
10
- end
5
+ describe "#max" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).max }.should_not raise_error
11
9
  end
10
+ end
12
11
 
13
- context "with a block" do
14
- [
15
- [[], nil],
16
- [["A"], "A"],
17
- [%w[Ichi Ni San], "Ichi"],
18
- ].each do |values, expected|
19
- context "on #{values.inspect}" do
20
- it "returns #{expected.inspect}" do
21
- Hamster.list(*values).send(method) { |maximum, item| maximum.length <=> item.length }.should == expected
22
- end
12
+ context "with a block" do
13
+ [
14
+ [[], nil],
15
+ [["A"], "A"],
16
+ [%w[Ichi Ni San], "Ichi"],
17
+ ].each do |values, expected|
18
+ context "on #{values.inspect}" do
19
+ it "returns #{expected.inspect}" do
20
+ L[*values].max { |maximum, item| maximum.length <=> item.length }.should == expected
23
21
  end
24
22
  end
25
23
  end
24
+ end
26
25
 
27
- context "without a block" do
28
- [
29
- [[], nil],
30
- [["A"], "A"],
31
- [%w[Ichi Ni San], "San"],
32
- ].each do |values, expected|
33
- context "on #{values.inspect}" do
34
- it "returns #{expected.inspect}" do
35
- Hamster.list(*values).send(method).should == expected
36
- end
26
+ context "without a block" do
27
+ [
28
+ [[], nil],
29
+ [["A"], "A"],
30
+ [%w[Ichi Ni San], "San"],
31
+ ].each do |values, expected|
32
+ context "on #{values.inspect}" do
33
+ it "returns #{expected.inspect}" do
34
+ L[*values].max.should == expected
37
35
  end
38
36
  end
39
37
  end
@@ -5,23 +5,23 @@ describe Hamster::List do
5
5
  context "without a comparator" do
6
6
  context "on an empty list" do
7
7
  it "returns an empty list" do
8
- Hamster.list.merge_by.should be_empty
8
+ L.empty.merge_by.should be_empty
9
9
  end
10
10
  end
11
11
 
12
12
  context "on a single list" do
13
- let(:list) { Hamster.list(1, 2, 3) }
13
+ let(:list) { L[1, 2, 3] }
14
14
 
15
15
  it "returns the list" do
16
- Hamster.list(list).merge_by.should eql(list)
16
+ L[list].merge_by.should eql(list)
17
17
  end
18
18
  end
19
19
 
20
20
  context "with multiple lists" do
21
- subject { Hamster.list(Hamster.list(3, 6, 7, 8), Hamster.list(1, 2, 4, 5, 9)) }
21
+ subject { L[L[3, 6, 7, 8], L[1, 2, 4, 5, 9]] }
22
22
 
23
23
  it "merges the lists based on natural sort order" do
24
- subject.merge_by.should == Hamster.list(1, 2, 3, 4, 5, 6, 7, 8, 9)
24
+ subject.merge_by.should == L[1, 2, 3, 4, 5, 6, 7, 8, 9]
25
25
  end
26
26
  end
27
27
  end
@@ -29,23 +29,23 @@ describe Hamster::List do
29
29
  context "with a comparator" do
30
30
  context "on an empty list" do
31
31
  it "returns an empty list" do
32
- Hamster.list.merge_by { |item| fail("should never be called") }.should be_empty
32
+ L.empty.merge_by { |item| fail("should never be called") }.should be_empty
33
33
  end
34
34
  end
35
35
 
36
36
  context "on a single list" do
37
- let(:list) { Hamster.list(1, 2, 3) }
37
+ let(:list) { L[1, 2, 3] }
38
38
 
39
39
  it "returns the list" do
40
- Hamster.list(list).merge_by { |item| -item }.should == Hamster.list(1, 2, 3)
40
+ L[list].merge_by { |item| -item }.should == L[1, 2, 3]
41
41
  end
42
42
  end
43
43
 
44
44
  context "with multiple lists" do
45
- subject { Hamster.list(Hamster.list(8, 7, 6, 3), Hamster.list(9, 5, 4, 2, 1)) }
45
+ subject { L[L[8, 7, 6, 3], L[9, 5, 4, 2, 1]] }
46
46
 
47
47
  it "merges the lists based on the specified transformer" do
48
- subject.merge_by { |item| -item }.should == Hamster.list(9, 8, 7, 6, 5, 4, 3, 2, 1)
48
+ subject.merge_by { |item| -item }.should == L[9, 8, 7, 6, 5, 4, 3, 2, 1]
49
49
  end
50
50
  end
51
51
  end
@@ -4,7 +4,7 @@ require "hamster/list"
4
4
  describe Hamster::List do
5
5
  context "without a comparator" do
6
6
  context "on an empty list" do
7
- subject { Hamster.list }
7
+ subject { L.empty }
8
8
 
9
9
  it "returns an empty list" do
10
10
  subject.merge.should be_empty
@@ -12,9 +12,9 @@ describe Hamster::List do
12
12
  end
13
13
 
14
14
  context "on a single list" do
15
- let(:list) { Hamster.list(1, 2, 3) }
15
+ let(:list) { L[1, 2, 3] }
16
16
 
17
- subject { Hamster.list(list) }
17
+ subject { L[list] }
18
18
 
19
19
  it "returns the list" do
20
20
  subject.merge.should == list
@@ -22,17 +22,17 @@ describe Hamster::List do
22
22
  end
23
23
 
24
24
  context "with multiple lists" do
25
- subject { Hamster.list(Hamster.list(3, 6, 7, 8), Hamster.list(1, 2, 4, 5, 9)) }
25
+ subject { L[L[3, 6, 7, 8], L[1, 2, 4, 5, 9]] }
26
26
 
27
27
  it "merges the lists based on natural sort order" do
28
- subject.merge.should == Hamster.list(1, 2, 3, 4, 5, 6, 7, 8, 9)
28
+ subject.merge.should == L[1, 2, 3, 4, 5, 6, 7, 8, 9]
29
29
  end
30
30
  end
31
31
  end
32
32
 
33
33
  context "with a comparator" do
34
34
  context "on an empty list" do
35
- subject { Hamster.list }
35
+ subject { L.empty }
36
36
 
37
37
  it "returns an empty list" do
38
38
  subject.merge { |a, b| fail("should never be called") }.should be_empty
@@ -40,9 +40,9 @@ describe Hamster::List do
40
40
  end
41
41
 
42
42
  context "on a single list" do
43
- let(:list) { Hamster.list(1, 2, 3) }
43
+ let(:list) { L[1, 2, 3] }
44
44
 
45
- subject { Hamster.list(list) }
45
+ subject { L[list] }
46
46
 
47
47
  it "returns the list" do
48
48
  subject.merge { |a, b| fail("should never be called") }.should == list
@@ -50,10 +50,10 @@ describe Hamster::List do
50
50
  end
51
51
 
52
52
  context "with multiple lists" do
53
- subject { Hamster.list(Hamster.list(8, 7, 6, 3), Hamster.list(9, 5, 4, 2, 1)) }
53
+ subject { L[L[8, 7, 6, 3], L[9, 5, 4, 2, 1]] }
54
54
 
55
55
  it "merges the lists based on the specified comparator" do
56
- subject.merge { |a, b| b <=> a }.should == Hamster.list(9, 8, 7, 6, 5, 4, 3, 2, 1)
56
+ subject.merge { |a, b| b <=> a }.should == L[9, 8, 7, 6, 5, 4, 3, 2, 1]
57
57
  end
58
58
  end
59
59
  end
@@ -2,38 +2,36 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:minimum, :min].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- it "doesn't run out of stack" do
9
- -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).send(method) }.should_not raise_error
10
- end
5
+ describe "#min" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).min }.should_not raise_error
11
9
  end
10
+ end
12
11
 
13
- context "with a block" do
14
- [
15
- [[], nil],
16
- [["A"], "A"],
17
- [%w[Ichi Ni San], "Ni"],
18
- ].each do |values, expected|
19
- context "on #{values.inspect}" do
20
- it "returns #{expected.inspect}" do
21
- Hamster.list(*values).send(method) { |minimum, item| minimum.length <=> item.length }.should == expected
22
- end
12
+ context "with a block" do
13
+ [
14
+ [[], nil],
15
+ [["A"], "A"],
16
+ [%w[Ichi Ni San], "Ni"],
17
+ ].each do |values, expected|
18
+ context "on #{values.inspect}" do
19
+ it "returns #{expected.inspect}" do
20
+ L[*values].min { |minimum, item| minimum.length <=> item.length }.should == expected
23
21
  end
24
22
  end
25
23
  end
24
+ end
26
25
 
27
- context "without a block" do
28
- [
29
- [[], nil],
30
- [["A"], "A"],
31
- [%w[Ichi Ni San], "Ichi"],
32
- ].each do |values, expected|
33
- context "on #{values.inspect}" do
34
- it "returns #{expected.inspect}" do
35
- Hamster.list(*values).send(method).should == expected
36
- end
26
+ context "without a block" do
27
+ [
28
+ [[], nil],
29
+ [["A"], "A"],
30
+ [%w[Ichi Ni San], "Ichi"],
31
+ ].each do |values, expected|
32
+ context "on #{values.inspect}" do
33
+ it "returns #{expected.inspect}" do
34
+ L[*values].min.should == expected
37
35
  end
38
36
  end
39
37
  end
@@ -1,11 +1,11 @@
1
1
  require "spec_helper"
2
2
  require "hamster/list"
3
- require "atomic"
3
+ require "concurrent/atomics"
4
4
 
5
5
  describe Hamster::List do
6
6
  it "ensures each node of a lazy list will only be realized on ONE thread, even when accessed by multiple threads" do
7
- counter = Atomic.new(0)
8
- list = Hamster.list(*1..10000).map { |x| counter.update { |count| count + 1 }; x * 2 }
7
+ counter = Concurrent::Atomic.new(0)
8
+ list = (1..10000).to_list.map { |x| counter.update { |count| count + 1 }; x * 2 }
9
9
 
10
10
  threads = 10.times.collect do
11
11
  Thread.new do
@@ -20,11 +20,11 @@ describe Hamster::List do
20
20
  end
21
21
 
22
22
  it "doesn't go into an infinite loop if lazy list block raises an exception" do
23
- list = Hamster.list(*1..10).map { raise "Oops!" }
23
+ list = (1..10).to_list.map { raise "Oops!" }
24
24
 
25
25
  threads = 10.times.collect do
26
26
  Thread.new do
27
- -> { list.head }.should raise_error
27
+ -> { list.head }.should raise_error(RuntimeError)
28
28
  end
29
29
  end
30
30
  threads.each(&:join)
@@ -32,7 +32,7 @@ describe Hamster::List do
32
32
 
33
33
  it "doesn't give horrendously bad performance if thread realizing the list sleeps" do
34
34
  start = Time.now
35
- list = Hamster.list(*1..100).map { |x| sleep(0.001); x * 2 }
35
+ list = (1..100).to_list.map { |x| sleep(0.001); x * 2 }
36
36
 
37
37
  threads = 10.times.collect do
38
38
  Thread.new do
@@ -11,17 +11,17 @@ describe Hamster::List do
11
11
 
12
12
  context "when empty" do
13
13
  it "with a block returns true" do
14
- Hamster.list.none? {}.should == true
14
+ L.empty.none? {}.should == true
15
15
  end
16
16
 
17
17
  it "with no block returns true" do
18
- Hamster.list.none?.should == true
18
+ L.empty.none?.should == true
19
19
  end
20
20
  end
21
21
 
22
22
  context "when not empty" do
23
23
  context "with a block" do
24
- let(:list) { Hamster.list("A", "B", "C", nil) }
24
+ let(:list) { L["A", "B", "C", nil] }
25
25
 
26
26
  ["A", "B", "C", nil].each do |value|
27
27
  it "returns false if the block ever returns true (#{value.inspect})" do
@@ -36,11 +36,11 @@ describe Hamster::List do
36
36
 
37
37
  context "with no block" do
38
38
  it "returns false if any value is truthy" do
39
- Hamster.list(nil, false, true, "A").none?.should == false
39
+ L[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.list(nil, false).none?.should == true
43
+ L[nil, false].none?.should == true
44
44
  end
45
45
  end
46
46
  end
@@ -11,17 +11,17 @@ describe Hamster::List do
11
11
 
12
12
  context "when empty" do
13
13
  it "with a block returns false" do
14
- Hamster.list.one? {}.should == false
14
+ L.empty.one? {}.should == false
15
15
  end
16
16
 
17
17
  it "with no block returns false" do
18
- Hamster.list.one?.should == false
18
+ L.empty.one?.should == false
19
19
  end
20
20
  end
21
21
 
22
22
  context "when not empty" do
23
23
  context "with a block" do
24
- let(:list) { Hamster.list("A", "B", "C") }
24
+ let(:list) { L["A", "B", "C"] }
25
25
 
26
26
  it "returns false if the block returns true more than once" do
27
27
  list.one? { |item| true }.should == false
@@ -38,11 +38,11 @@ describe Hamster::List do
38
38
 
39
39
  context "with no block" do
40
40
  it "returns false if more than one value is truthy" do
41
- Hamster.list(nil, true, "A").one?.should == false
41
+ L[nil, true, "A"].one?.should == false
42
42
  end
43
43
 
44
44
  it "returns true if only one value is truthy" do
45
- Hamster.list(nil, true, false).one?.should == true
45
+ L[nil, true, false].one?.should == true
46
46
  end
47
47
  end
48
48
  end