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
@@ -17,27 +17,27 @@ describe Hamster::List do
17
17
  [%w[Ichi Ni San], %w[Ni San Ichi]],
18
18
  ].each do |values, expected|
19
19
  context "on #{values.inspect}" do
20
- let(:list) { Hamster.list(*values) }
20
+ let(:list) { L[*values] }
21
21
 
22
22
  context "with a block" do
23
23
  it "preserves the original" do
24
24
  list.send(method, &comparator)
25
- list.should == Hamster.list(*values)
25
+ list.should == L[*values]
26
26
  end
27
27
 
28
28
  it "returns #{expected.inspect}" do
29
- list.send(method, &comparator).should == Hamster.list(*expected)
29
+ list.send(method, &comparator).should == L[*expected]
30
30
  end
31
31
  end
32
32
 
33
33
  context "without a block" do
34
34
  it "preserves the original" do
35
35
  list.send(method)
36
- list.should eql(Hamster.list(*values))
36
+ list.should eql(L[*values])
37
37
  end
38
38
 
39
39
  it "returns #{expected.sort.inspect}" do
40
- list.send(method).should == Hamster.list(*expected.sort)
40
+ list.send(method).should == L[*expected.sort]
41
41
  end
42
42
  end
43
43
  end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
- describe "Hamster.list#span" do
4
+ describe "Hamster::list#span" do
5
5
  it "is lazy" do
6
6
  -> { Hamster.stream { |item| fail }.span { true } }.should_not raise_error
7
7
  end
@@ -25,7 +25,7 @@ DESC
25
25
  [[4], [], [4]],
26
26
  ].each do |values, expected_prefix, expected_remainder|
27
27
  context "given the list #{values.inspect}" do
28
- let(:list) { Hamster.list(*values) }
28
+ let(:list) { L[*values] }
29
29
 
30
30
  context "and a predicate that returns true for values <= 2" do
31
31
  let(:result) { list.span { |item| item <= 2 }}
@@ -34,15 +34,15 @@ DESC
34
34
 
35
35
  it "preserves the original" do
36
36
  result
37
- list.should eql(Hamster.list(*values))
37
+ list.should eql(L[*values])
38
38
  end
39
39
 
40
40
  it "returns the prefix as #{expected_prefix.inspect}" do
41
- prefix.should eql(Hamster.list(*expected_prefix))
41
+ prefix.should eql(L[*expected_prefix])
42
42
  end
43
43
 
44
44
  it "returns the remainder as #{expected_remainder.inspect}" do
45
- remainder.should eql(Hamster.list(*expected_remainder))
45
+ remainder.should eql(L[*expected_remainder])
46
46
  end
47
47
 
48
48
  it "calls the block only once for each element" do
@@ -15,14 +15,14 @@ describe Hamster::List do
15
15
  [[1, 2, 3, 4], [1, 2], [3, 4]],
16
16
  ].each do |values, expected_prefix, expected_remainder|
17
17
  context "on #{values.inspect}" do
18
- let(:list) { Hamster.list(*values) }
18
+ let(:list) { L[*values] }
19
19
  let(:result) { list.split_at(2) }
20
20
  let(:prefix) { result.first }
21
21
  let(:remainder) { result.last }
22
22
 
23
23
  it "preserves the original" do
24
24
  result
25
- list.should eql(Hamster.list(*values))
25
+ list.should eql(L[*values])
26
26
  end
27
27
 
28
28
  it "returns a frozen array with two items" do
@@ -32,11 +32,11 @@ describe Hamster::List do
32
32
  end
33
33
 
34
34
  it "correctly identifies the matches" do
35
- prefix.should eql(Hamster.list(*expected_prefix))
35
+ prefix.should eql(L[*expected_prefix])
36
36
  end
37
37
 
38
38
  it "correctly identifies the remainder" do
39
- remainder.should eql(Hamster.list(*expected_remainder))
39
+ remainder.should eql(L[*expected_remainder])
40
40
  end
41
41
  end
42
42
  end
@@ -3,7 +3,7 @@ require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
5
  describe "#subsequences" do
6
- let(:list) { Hamster.list(1,2,3,4,5) }
6
+ let(:list) { L[1,2,3,4,5] }
7
7
 
8
8
  it "yields all sublists with 1 or more consecutive items" do
9
9
  result = []
@@ -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).sum.should == expected
19
+ L[*values].sum.should == expected
20
20
  end
21
21
  end
22
22
  end
@@ -5,7 +5,7 @@ describe Hamster::List do
5
5
  describe "#tail" do
6
6
  context "on a really big list" do
7
7
  it "doesn't run out of stack" do
8
- -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).filter(&:nil?).tail }.should_not raise_error
8
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).select(&:nil?).tail }.should_not raise_error
9
9
  end
10
10
  end
11
11
 
@@ -15,15 +15,15 @@ describe Hamster::List do
15
15
  [%w[A B C], %w[B C]],
16
16
  ].each do |values, expected|
17
17
  context "on #{values.inspect}" do
18
- let(:list) { Hamster.list(*values) }
18
+ let(:list) { L[*values] }
19
19
 
20
20
  it "preserves the original" do
21
21
  list.tail
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.tail.should eql(Hamster.list(*expected))
26
+ list.tail.should eql(L[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -13,15 +13,15 @@ describe Hamster::List do
13
13
  [%w[A B C], [L["A", "B", "C"], L["B", "C"], 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.tails
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.tails.should eql(Hamster.list(*expected))
24
+ list.tails.should eql(L[*expected])
25
25
  end
26
26
  end
27
27
  end
@@ -15,15 +15,15 @@ describe Hamster::List do
15
15
  [%w[A B C], 2, %w[A B]],
16
16
  ].each do |values, number, expected|
17
17
  context "#{number} from #{values.inspect}" do
18
- let(:list) { Hamster.list(*values) }
18
+ let(:list) { L[*values] }
19
19
 
20
20
  it "preserves the original" do
21
21
  list.take(number)
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.take(number).should eql(Hamster.list(*expected))
26
+ list.take(number).should eql(L[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -13,16 +13,16 @@ describe Hamster::List do
13
13
  [%w[A B C], %w[A B]],
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
  context "with a block" do
19
19
  it "returns #{expected.inspect}" do
20
- list.take_while { |item| item < "C" }.should eql(Hamster.list(*expected))
20
+ list.take_while { |item| item < "C" }.should eql(L[*expected])
21
21
  end
22
22
 
23
23
  it "preserves the original" do
24
24
  list.take_while { |item| item < "C" }
25
- list.should eql(Hamster.list(*values))
25
+ list.should eql(L[*values])
26
26
  end
27
27
 
28
28
  it "is lazy" do
@@ -38,7 +38,7 @@ describe Hamster::List do
38
38
  context "without a block" do
39
39
  it "returns an Enumerator" do
40
40
  list.take_while.class.should be(Enumerator)
41
- list.take_while.each { |item| item < "C" }.should eql(Hamster.list(*expected))
41
+ list.take_while.each { |item| item < "C" }.should eql(L[*expected])
42
42
  end
43
43
  end
44
44
  end
@@ -16,7 +16,7 @@ describe Hamster::List do
16
16
  %w[A B C],
17
17
  ].each do |values|
18
18
  context "on #{values.inspect}" do
19
- let(:list) { Hamster.list(*values) }
19
+ let(:list) { L[*values] }
20
20
 
21
21
  it "returns #{values.inspect}" do
22
22
  list.send(method).should == values
@@ -24,7 +24,7 @@ describe Hamster::List do
24
24
 
25
25
  it "leaves the original unchanged" do
26
26
  list.send(method)
27
- list.should eql(Hamster.list(*values))
27
+ list.should eql(L[*values])
28
28
  end
29
29
 
30
30
  it "returns a mutable array" do
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- let(:list) { Hamster.list("A", "B", "C", "D") }
5
+ let(:list) { L["A", "B", "C", "D"] }
6
6
 
7
7
  describe "#to_ary" do
8
8
  context "on a really big list" do
@@ -9,7 +9,7 @@ describe Hamster::List do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  context "on #{values.inspect}" do
12
- let(:list) { Hamster.list(*values) }
12
+ let(:list) { L[*values] }
13
13
 
14
14
  it "returns self" do
15
15
  list.to_list.should equal(list)
@@ -11,7 +11,7 @@ describe Hamster::List do
11
11
  ].each do |values|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns a set with the same values" do
14
- Hamster.list(*values).to_set.should eql(Hamster.set(*values))
14
+ L[*values].to_set.should eql(S[*values])
15
15
  end
16
16
  end
17
17
  end
@@ -15,15 +15,15 @@ describe Hamster::List do
15
15
  [%w[A A], ["A"], ["A"]],
16
16
  ].each do |a, b, expected|
17
17
  context "returns #{expected.inspect}" do
18
- let(:list_a) { Hamster.list(*a) }
19
- let(:list_b) { Hamster.list(*b) }
18
+ let(:list_a) { L[*a] }
19
+ let(:list_b) { L[*b] }
20
20
 
21
21
  it "for #{a.inspect} and #{b.inspect}" do
22
- list_a.send(method, list_b).should eql(Hamster.list(*expected))
22
+ list_a.send(method, list_b).should eql(L[*expected])
23
23
  end
24
24
 
25
25
  it "for #{b.inspect} and #{a.inspect}" do
26
- list_b.send(method, list_a).should eql(Hamster.list(*expected))
26
+ list_b.send(method, list_a).should eql(L[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -2,29 +2,33 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:uniq, :nub, :remove_duplicates].each do |method|
6
- describe "##{method}" do
7
- it "is lazy" do
8
- -> { Hamster.stream { fail }.uniq }.should_not raise_error
5
+ describe "#uniq" do
6
+ it "is lazy" do
7
+ -> { Hamster.stream { fail }.uniq }.should_not raise_error
8
+ end
9
+
10
+ context "when passed a block" do
11
+ it "uses the block to identify duplicates" do
12
+ L["a", "A", "b"].uniq(&:upcase).should eql(Hamster::List["a", "b"])
9
13
  end
14
+ end
10
15
 
11
- [
12
- [[], []],
13
- [["A"], ["A"]],
14
- [%w[A B C], %w[A B C]],
15
- [%w[A B A C C], %w[A B C]],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- let(:list) { Hamster.list(*values) }
16
+ [
17
+ [[], []],
18
+ [["A"], ["A"]],
19
+ [%w[A B C], %w[A B C]],
20
+ [%w[A B A C C], %w[A B C]],
21
+ ].each do |values, expected|
22
+ context "on #{values.inspect}" do
23
+ let(:list) { L[*values] }
19
24
 
20
- it "preserves the original" do
21
- list.send(method)
22
- list.should eql(Hamster.list(*values))
23
- end
25
+ it "preserves the original" do
26
+ list.uniq
27
+ list.should eql(L[*values])
28
+ end
24
29
 
25
- it "returns #{expected.inspect}" do
26
- list.send(method).should eql(Hamster.list(*expected))
27
- end
30
+ it "returns #{expected.inspect}" do
31
+ list.uniq.should eql(L[*expected])
28
32
  end
29
33
  end
30
34
  end
@@ -9,14 +9,14 @@ describe Hamster::List do
9
9
 
10
10
  [
11
11
  [[], [], []],
12
- [["A"], ["aye"], [Hamster.list("A", "aye")]],
13
- [["A"], [], [Hamster.list("A", nil)]],
14
- [[], ["A"], [Hamster.list(nil, "A")]],
15
- [%w[A B C], %w[aye bee see], [Hamster.list("A", "aye"), Hamster.list("B", "bee"), Hamster.list("C", "see")]],
12
+ [["A"], ["aye"], [L["A", "aye"]]],
13
+ [["A"], [], [L["A", nil]]],
14
+ [[], ["A"], [L[nil, "A"]]],
15
+ [%w[A B C], %w[aye bee see], [L["A", "aye"], L["B", "bee"], L["C", "see"]]],
16
16
  ].each do |left, right, expected|
17
17
  context "on #{left.inspect} and #{right.inspect}" do
18
18
  it "returns #{expected.inspect}" do
19
- Hamster.list(*left).zip(Hamster.list(*right)).should eql(Hamster.list(*expected))
19
+ L[*left].zip(L[*right]).should eql(L[*expected])
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,103 @@
1
+ require "spec_helper"
2
+ require "hamster/nested"
3
+ require "hamster/deque"
4
+ require "set"
5
+
6
+ describe Hamster do
7
+ expectations = [
8
+ # [Ruby, Hamster]
9
+ [ { "a" => 1,
10
+ "b" => [2, {"c" => 3}, 4],
11
+ "d" => ::Set.new([5, 6, 7]),
12
+ "e" => {"f" => 8, "g" => 9},
13
+ "h" => Regexp.new("ijk"),
14
+ "l" => ::SortedSet.new([1, 2, 3]) },
15
+ Hamster::Hash[
16
+ "a" => 1,
17
+ "b" => Hamster::Vector[2, Hamster::Hash["c" => 3], 4],
18
+ "d" => Hamster::Set[5, 6, 7],
19
+ "e" => Hamster::Hash["f" => 8, "g" => 9],
20
+ "h" => Regexp.new("ijk"),
21
+ "l" => Hamster::SortedSet.new([1, 2, 3])] ],
22
+ [ {}, Hamster::Hash[] ],
23
+ [ {"a" => 1, "b" => 2, "c" => 3}, Hamster::Hash["a" => 1, "b" => 2, "c" => 3] ],
24
+ [ [], Hamster::Vector[] ],
25
+ [ [1, 2, 3], Hamster::Vector[1, 2, 3] ],
26
+ [ ::Set.new, Hamster::Set[] ],
27
+ [ ::Set.new([1, 2, 3]), Hamster::Set[1, 2, 3] ],
28
+ [ ::SortedSet.new, Hamster::SortedSet[] ],
29
+ [ ::SortedSet.new([1, 2, 3]), Hamster::SortedSet[1, 2, 3] ],
30
+ [ 42, 42 ],
31
+ [ STDOUT, STDOUT ],
32
+
33
+ # Struct conversion is one-way (from Ruby core Struct to Hamster::Hash), not back again!
34
+ [ Struct::Customer.new, Hamster::Hash[name: nil, address: nil], true ],
35
+ [ Struct::Customer.new('Dave', '123 Main'), Hamster::Hash[name: 'Dave', address: '123 Main'], true ]
36
+ ]
37
+
38
+ describe ".from" do
39
+ expectations.each do |input, expected_result|
40
+ context "with #{input.inspect} as input" do
41
+ it "should return #{expected_result.inspect}" do
42
+ Hamster.from(input).should eql(expected_result)
43
+ end
44
+ end
45
+ end
46
+
47
+ context "with mixed object" do
48
+ it "should return Hamster data" do
49
+ input = {
50
+ "a" => "b",
51
+ "c" => {"d" => "e"},
52
+ "f" => Hamster::Vector["g", "h", []],
53
+ "i" => Hamster::Hash["j" => {}, "k" => Hamster::Set[[], {}]] }
54
+ expected_result = Hamster::Hash[
55
+ "a" => "b",
56
+ "c" => Hamster::Hash["d" => "e"],
57
+ "f" => Hamster::Vector["g", "h", Hamster::EmptyVector],
58
+ "i" => Hamster::Hash["j" => Hamster::EmptyHash, "k" => Hamster::Set[Hamster::EmptyVector, Hamster::EmptyHash]] ]
59
+ Hamster.from(input).should eql(expected_result)
60
+ end
61
+ end
62
+ end
63
+
64
+ describe ".to_ruby" do
65
+ expectations.each do |expected_result, input, one_way|
66
+ unless one_way
67
+ context "with #{input.inspect} as input" do
68
+ it "should return #{expected_result.inspect}" do
69
+ Hamster.to_ruby(input).should eql(expected_result)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ context "with Hamster::Deque[] as input" do
76
+ it "should return []" do
77
+ Hamster.to_ruby(Hamster::Deque[]).should eql([])
78
+ end
79
+ end
80
+
81
+ context "with Hamster::Deque[Hamster::Hash[\"a\" => 1]] as input" do
82
+ it "should return [{\"a\" => 1}]" do
83
+ Hamster.to_ruby(Hamster::Deque[Hamster::Hash["a" => 1]]).should eql([{"a" => 1}])
84
+ end
85
+ end
86
+
87
+ context "with mixed object" do
88
+ it "should return Ruby data structures" do
89
+ input = Hamster::Hash[
90
+ "a" => "b",
91
+ "c" => {"d" => "e"},
92
+ "f" => Hamster::Vector["g", "h"],
93
+ "i" => {"j" => Hamster::EmptyHash, "k" => Set.new([Hamster::EmptyVector, Hamster::EmptyHash])}]
94
+ expected_result = {
95
+ "a" => "b",
96
+ "c" => {"d" => "e"},
97
+ "f" => ["g", "h"],
98
+ "i" => {"j" => {}, "k" => Set.new([[], {}])} }
99
+ Hamster.to_ruby(input).should eql(expected_result)
100
+ end
101
+ end
102
+ end
103
+ end