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
@@ -4,7 +4,7 @@ require "hamster/hash"
4
4
  describe Hamster::Hash do
5
5
  describe "#to_a" do
6
6
  it "returns an Array of [key, value] pairs in same order as #each" do
7
- hash = Hamster.hash(:a => 1, 1 => :a, 3 => :b, :b => 5)
7
+ hash = H[:a => 1, 1 => :a, 3 => :b, :b => 5]
8
8
  pairs = []
9
9
  hash.each_pair { |k,v| pairs << [k,v] }
10
10
  hash.to_a.should be_kind_of(Array)
@@ -5,17 +5,17 @@ describe Hamster::Hash do
5
5
  [:to_hash, :to_h].each do |method|
6
6
  describe "##{method}" do
7
7
  it "converts an empty Hamster::Hash to an empty Ruby Hash" do
8
- Hamster.hash.send(method).should eql({})
8
+ H.empty.send(method).should eql({})
9
9
  end
10
10
 
11
11
  it "converts a non-empty Hamster::Hash to a Hash with the same keys and values" do
12
- Hamster.hash(a: 1, b: 2).send(method).should eql({a: 1, b: 2})
12
+ H[a: 1, b: 2].send(method).should eql({a: 1, b: 2})
13
13
  end
14
14
 
15
15
  it "doesn't modify the receiver" do
16
- hash = Hamster.hash(a: 1, b: 2)
16
+ hash = H[a: 1, b: 2]
17
17
  hash.send(method)
18
- hash.should eql(Hamster.hash(a: 1, b: 2))
18
+ hash.should eql(H[a: 1, b: 2])
19
19
  end
20
20
  end
21
21
  end
@@ -4,11 +4,11 @@ require "hamster/hash"
4
4
  describe Hamster::Hash do
5
5
  describe "#values_at" do
6
6
  it "returns a vector of values for the given keys" do
7
- h = Hamster.hash(:a => 9, :b => 'a', :c => -10, :d => nil)
7
+ h = H[:a => 9, :b => 'a', :c => -10, :d => nil]
8
8
  h.values_at.should be_kind_of(Hamster::Vector)
9
- h.values_at.should eql(Hamster.vector)
9
+ h.values_at.should eql(V.empty)
10
10
  h.values_at(:a, :d, :b).should be_kind_of(Hamster::Vector)
11
- h.values_at(:a, :d, :b).should eql(Hamster::Vector[9, nil, 'a'])
11
+ h.values_at(:a, :d, :b).should eql(V[9, nil, 'a'])
12
12
  end
13
13
  end
14
14
  end
@@ -4,7 +4,7 @@ require "hamster/set"
4
4
 
5
5
  describe Hamster::Hash do
6
6
  describe "#values" do
7
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see") }
7
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
8
8
  let(:result) { hash.values }
9
9
 
10
10
  it "returns the keys as a Vector" do
@@ -13,7 +13,7 @@ describe Hamster::Hash do
13
13
  end
14
14
 
15
15
  context "with duplicates" do
16
- let(:hash) { Hamster.hash(:A => 15, :B => 19, :C => 15) }
16
+ let(:hash) { H[:A => 15, :B => 19, :C => 15] }
17
17
  let(:result) { hash.values }
18
18
 
19
19
  it "returns the keys as a Vector" do
@@ -11,4 +11,18 @@ describe Hamster::Immutable do
11
11
  it "freezes the instance" do
12
12
  expect(immutable).to be_frozen
13
13
  end
14
+
15
+ context "subclass hides all public methods" do
16
+ it "freezes the instance" do
17
+ my_class = Class.new do
18
+ include Hamster::Immutable
19
+
20
+ (public_instance_methods - Object.public_instance_methods).each do |m|
21
+ protected m
22
+ end
23
+ end
24
+ immutable = my_class.new
25
+ expect(immutable).to be_frozen
26
+ end
27
+ end
14
28
  end
@@ -3,17 +3,23 @@ require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
5
  describe "#add" do
6
- it "adds an item onto the end of a list" do
7
- list = Hamster.list("a", "b")
8
- list.add("c").should eql(Hamster.list("a", "b", "c"))
9
- list.should eql(Hamster.list("a", "b"))
10
- end
6
+ [
7
+ [[], "A", ["A"]],
8
+ [["A"], "B", %w[B A]],
9
+ [["A"], "A", %w[A A]],
10
+ [%w[A B C], "D", %w[D A B C]],
11
+ ].each do |values, new_value, expected|
12
+ context "on #{values.inspect} with #{new_value.inspect}" do
13
+ let(:list) { L[*values] }
14
+
15
+ it "preserves the original" do
16
+ list.add(new_value)
17
+ list.should eql(L[*values])
18
+ end
11
19
 
12
- context "on an empty list" do
13
- it "returns a list with one item" do
14
- list = Hamster.list
15
- list.add("c").should eql(Hamster.list("c"))
16
- list.should eql(Hamster.list)
20
+ it "returns #{expected.inspect}" do
21
+ list.add(new_value).should eql(L[*expected])
22
+ end
17
23
  end
18
24
  end
19
25
  end
@@ -2,55 +2,53 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:all?, :forall?].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- let(:list) { Hamster.interval(0, STACK_OVERFLOW_DEPTH) }
5
+ describe "#all?" do
6
+ context "on a really big list" do
7
+ let(:list) { Hamster.interval(0, STACK_OVERFLOW_DEPTH) }
9
8
 
10
- it "doesn't run out of stack" do
11
- -> { list.send(method) }.should_not raise_error
12
- end
9
+ it "doesn't run out of stack" do
10
+ -> { list.all? }.should_not raise_error
13
11
  end
12
+ end
14
13
 
15
- context "when empty" do
16
- it "with a block returns true" do
17
- Hamster.list.send(method) {}.should == true
18
- end
14
+ context "when empty" do
15
+ it "with a block returns true" do
16
+ L.empty.all? {}.should == true
17
+ end
19
18
 
20
- it "with no block returns true" do
21
- Hamster.list.send(method).should == true
22
- end
19
+ it "with no block returns true" do
20
+ L.empty.all?.should == true
23
21
  end
22
+ end
24
23
 
25
- context "when not empty" do
26
- context "with a block" do
27
- let(:list) { Hamster.list("A", "B", "C") }
24
+ context "when not empty" do
25
+ context "with a block" do
26
+ let(:list) { L["A", "B", "C"] }
28
27
 
29
- context "if the block always returns true" do
30
- it "returns true" do
31
- list.send(method) { |item| true }.should == true
32
- end
28
+ context "if the block always returns true" do
29
+ it "returns true" do
30
+ list.all? { |item| true }.should == true
33
31
  end
32
+ end
34
33
 
35
- context "if the block ever returns false" do
36
- it "returns false" do
37
- list.send(method) { |item| item == "D" }.should == false
38
- end
34
+ context "if the block ever returns false" do
35
+ it "returns false" do
36
+ list.all? { |item| item == "D" }.should == false
39
37
  end
40
38
  end
39
+ end
41
40
 
42
- context "with no block" do
43
- context "if all values are truthy" do
44
- it "returns true" do
45
- Hamster.list(true, "A").send(method).should == true
46
- end
41
+ context "with no block" do
42
+ context "if all values are truthy" do
43
+ it "returns true" do
44
+ L[true, "A"].all?.should == true
47
45
  end
46
+ end
48
47
 
49
- [nil, false].each do |value|
50
- context "if any value is #{value.inspect}" do
51
- it "returns false" do
52
- Hamster.list(value, true, "A").send(method).should == false
53
- end
48
+ [nil, false].each do |value|
49
+ context "if any value is #{value.inspect}" do
50
+ it "returns false" do
51
+ L[value, true, "A"].all?.should == false
54
52
  end
55
53
  end
56
54
  end
@@ -2,49 +2,47 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:any?, :exist?, :exists?].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- let(:list) { Hamster.interval(0, STACK_OVERFLOW_DEPTH) }
5
+ describe "#any?" do
6
+ context "on a really big list" do
7
+ let(:list) { Hamster.interval(0, STACK_OVERFLOW_DEPTH) }
9
8
 
10
- it "doesn't run out of stack" do
11
- -> { list.send(method) { false } }.should_not raise_error
12
- end
9
+ it "doesn't run out of stack" do
10
+ -> { list.any? { false } }.should_not raise_error
13
11
  end
12
+ end
14
13
 
15
- context "when empty" do
16
- it "with a block returns false" do
17
- Hamster.list.send(method) {}.should == false
18
- end
14
+ context "when empty" do
15
+ it "with a block returns false" do
16
+ L.empty.any? {}.should == false
17
+ end
19
18
 
20
- it "with no block returns false" do
21
- Hamster.list.send(method).should == false
22
- end
19
+ it "with no block returns false" do
20
+ L.empty.any?.should == false
23
21
  end
22
+ end
24
23
 
25
- context "when not empty" do
26
- context "with a block" do
27
- let(:list) { Hamster.list("A", "B", "C", nil) }
24
+ context "when not empty" do
25
+ context "with a block" do
26
+ let(:list) { L["A", "B", "C", nil] }
28
27
 
29
- ["A", "B", "C", nil].each do |value|
30
- it "returns true if the block ever returns true (#{value.inspect})" do
31
- list.send(method) { |item| item == value }.should == true
32
- end
28
+ ["A", "B", "C", nil].each do |value|
29
+ it "returns true if the block ever returns true (#{value.inspect})" do
30
+ list.any? { |item| item == value }.should == true
33
31
  end
32
+ end
34
33
 
35
- it "returns false if the block always returns false" do
36
- list.send(method) { |item| item == "D" }.should == false
37
- end
34
+ it "returns false if the block always returns false" do
35
+ list.any? { |item| item == "D" }.should == false
38
36
  end
37
+ end
39
38
 
40
- context "with no block" do
41
- it "returns true if any value is truthy" do
42
- Hamster.list(nil, false, "A", true).send(method).should == true
43
- end
39
+ context "with no block" do
40
+ it "returns true if any value is truthy" do
41
+ L[nil, false, "A", true].any?.should == true
42
+ end
44
43
 
45
- it "returns false if all values are falsey" do
46
- Hamster.list(nil, false).send(method).should == false
47
- end
44
+ it "returns false if all values are falsey" do
45
+ L[nil, false].any?.should == false
48
46
  end
49
47
  end
50
48
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:append, :concat, :cat, :+].each do |method|
5
+ [:append, :concat, :+].each do |method|
6
6
  describe "##{method}" do
7
7
  it "is lazy" do
8
8
  -> { Hamster.stream { fail }.append(Hamster.stream { fail }) }.should_not raise_error
@@ -15,22 +15,22 @@ describe Hamster::List do
15
15
  [%w[A B], %w[C D], %w[A B C D]],
16
16
  ].each do |left_values, right_values, expected|
17
17
  context "on #{left_values.inspect} and #{right_values.inspect}" do
18
- let(:left) { Hamster.list(*left_values) }
19
- let(:right) { Hamster.list(*right_values) }
18
+ let(:left) { L[*left_values] }
19
+ let(:right) { L[*right_values] }
20
20
  let(:result) { left.append(right) }
21
21
 
22
22
  it "preserves the left" do
23
23
  result
24
- left.should eql(Hamster.list(*left_values))
24
+ left.should eql(L[*left_values])
25
25
  end
26
26
 
27
27
  it "preserves the right" do
28
28
  result
29
- right.should eql(Hamster.list(*right_values))
29
+ right.should eql(L[*right_values])
30
30
  end
31
31
 
32
32
  it "returns #{expected.inspect}" do
33
- result.should eql(Hamster.list(*expected))
33
+ result.should eql(L[*expected])
34
34
  end
35
35
  end
36
36
  end
@@ -22,7 +22,7 @@ describe Hamster::List do
22
22
  ].each do |values, number, expected|
23
23
  describe "#{values.inspect} with #{number}" do
24
24
  it "returns #{expected.inspect}" do
25
- Hamster.list(*values).at(number).should == expected
25
+ L[*values].at(number).should == expected
26
26
  end
27
27
  end
28
28
  end
@@ -18,7 +18,7 @@ describe Hamster::List do
18
18
  [[4], [], [4]],
19
19
  ].each do |values, expected_prefix, expected_remainder|
20
20
  context "on #{values.inspect}" do
21
- let(:list) { Hamster.list(*values) }
21
+ let(:list) { L[*values] }
22
22
 
23
23
  context "with a block" do
24
24
  let(:result) { list.break { |item| item > 2 }}
@@ -27,7 +27,7 @@ describe Hamster::List do
27
27
 
28
28
  it "preserves the original" do
29
29
  result
30
- list.should eql(Hamster.list(*values))
30
+ list.should eql(L[*values])
31
31
  end
32
32
 
33
33
  it "returns a frozen array with two items" do
@@ -37,11 +37,11 @@ describe Hamster::List do
37
37
  end
38
38
 
39
39
  it "correctly identifies the prefix" do
40
- prefix.should eql(Hamster.list(*expected_prefix))
40
+ prefix.should eql(L[*expected_prefix])
41
41
  end
42
42
 
43
43
  it "correctly identifies the remainder" do
44
- remainder.should eql(Hamster.list(*expected_remainder))
44
+ remainder.should eql(L[*expected_remainder])
45
45
  end
46
46
  end
47
47
 
@@ -10,24 +10,24 @@ describe Hamster::List do
10
10
  [%w[A B C], :caddr, "C"],
11
11
  [%w[A B C], :cadddr, nil],
12
12
  [%w[A B C], :caddddr, nil],
13
- [[], :cdr, Hamster.list],
14
- [["A"], :cdr, Hamster.list],
15
- [%w[A B C], :cdr, Hamster.list("B", "C")],
16
- [%w[A B C], :cddr, Hamster.list("C")],
17
- [%w[A B C], :cdddr, Hamster.list],
18
- [%w[A B C], :cddddr, Hamster.list],
13
+ [[], :cdr, L.empty],
14
+ [["A"], :cdr, L.empty],
15
+ [%w[A B C], :cdr, L["B", "C"]],
16
+ [%w[A B C], :cddr, L["C"]],
17
+ [%w[A B C], :cdddr, L.empty],
18
+ [%w[A B C], :cddddr, L.empty],
19
19
  ].each do |values, method, expected|
20
20
  describe "##{method}" do
21
21
  it "is responded to" do
22
- Hamster.list.respond_to?(method).should == true
22
+ L.empty.respond_to?(method).should == true
23
23
  end
24
24
 
25
25
  context "on #{values.inspect}" do
26
- let(:list) { Hamster.list(*values) }
26
+ let(:list) { L[*values] }
27
27
 
28
28
  it "preserves the original" do
29
29
  list.send(method)
30
- list.should eql(Hamster.list(*values))
30
+ list.should eql(L[*values])
31
31
  end
32
32
 
33
33
  it "returns #{expected.inspect}" do
@@ -9,19 +9,19 @@ describe Hamster::List do
9
9
 
10
10
  [
11
11
  [[], []],
12
- [["A"], [Hamster.list("A")]],
13
- [%w[A B C], [Hamster.list("A", "B"), Hamster.list("C")]],
12
+ [["A"], [L["A"]]],
13
+ [%w[A B C], [L["A", "B"], L["C"]]],
14
14
  ].each do |values, expected|
15
15
  context "on #{values.inspect}" do
16
- let(:list) { Hamster.list(*values) }
16
+ let(:list) { L[*values] }
17
17
 
18
18
  it "preserves the original" do
19
19
  list.chunk(2)
20
- list.should eql(Hamster.list(*values))
20
+ list.should eql(L[*values])
21
21
  end
22
22
 
23
23
  it "returns #{expected.inspect}" do
24
- list.chunk(2).should eql(Hamster.list(*expected))
24
+ list.chunk(2).should eql(L[*expected])
25
25
  end
26
26
  end
27
27
  end
@@ -9,15 +9,15 @@ describe Hamster::List do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  describe "on #{values}" do
12
- let(:list) { Hamster.list(*values) }
12
+ let(:list) { L[*values] }
13
13
 
14
14
  it "preserves the original" do
15
15
  list.clear
16
- list.should eql(Hamster.list(*values))
16
+ list.should eql(L[*values])
17
17
  end
18
18
 
19
19
  it "returns an empty list" do
20
- list.clear.should equal(Hamster.list)
20
+ list.clear.should equal(L.empty)
21
21
  end
22
22
  end
23
23
  end
@@ -18,15 +18,15 @@ describe Hamster::List do
18
18
  [[], 1, []],
19
19
  ].each do |values, number, expected|
20
20
  context "on #{values.inspect} in groups of #{number}" do
21
- let(:list) { Hamster.list(*values) }
21
+ let(:list) { L[*values] }
22
22
 
23
23
  it "preserves the original" do
24
24
  list.combination(number)
25
- list.should eql(Hamster.list(*values))
25
+ list.should eql(L[*values])
26
26
  end
27
27
 
28
28
  it "returns #{expected.inspect}" do
29
- list.combination(number).should eql(Hamster.list(*expected))
29
+ list.combination(number).should eql(L[*expected])
30
30
  end
31
31
  end
32
32
  end