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
@@ -38,25 +38,25 @@ describe Hamster::List do
38
38
  end
39
39
  end
40
40
 
41
- include_examples 'equal using ==' , Hamster.list("A", "B", "C"), %w[A B C]
42
- include_examples 'not equal using eql?' , Hamster.list("A", "B", "C"), %w[A B C]
43
- include_examples 'not equal using ==' , Hamster.list("A", "B", "C"), Object.new
44
- include_examples 'not equal using eql?' , Hamster.list("A", "B", "C"), Object.new
45
- include_examples 'equal using ==' , Hamster.list, []
46
- include_examples 'not equal using eql?' , Hamster.list, []
47
-
48
- include_examples 'equal using eql?' , Hamster.list, Hamster.list
49
- include_examples 'not equal using eql?' , Hamster.list, Hamster.list(nil)
50
- include_examples 'not equal using eql?' , Hamster.list("A"), Hamster.list
51
- include_examples 'equal using eql?' , Hamster.list("A"), Hamster.list("A")
52
- include_examples 'not equal using eql?' , Hamster.list("A"), Hamster.list("B")
53
- include_examples 'not equal using eql?' , Hamster.list(%w[A B]), Hamster.list("A")
54
- include_examples 'equal using eql?' , Hamster.list(*%w[A B C]), Hamster.list(*%w[A B C])
55
- include_examples 'not equal using eql?' , Hamster.list(*%w[C A B]), Hamster.list(*%w[A B C])
56
-
57
- include_examples 'equal using ==' , Hamster.list('A'), ['A']
58
- include_examples 'equal using ==' , ['A'], Hamster.list('A')
59
-
60
- include_examples 'not equal using eql?' , Hamster.list('A'), ['A']
61
- include_examples 'not equal using eql?' , ['A'], Hamster.list('A')
41
+ include_examples 'equal using ==' , L["A", "B", "C"], %w[A B C]
42
+ include_examples 'not equal using eql?' , L["A", "B", "C"], %w[A B C]
43
+ include_examples 'not equal using ==' , L["A", "B", "C"], Object.new
44
+ include_examples 'not equal using eql?' , L["A", "B", "C"], Object.new
45
+ include_examples 'equal using ==' , L.empty, []
46
+ include_examples 'not equal using eql?' , L.empty, []
47
+
48
+ include_examples 'equal using eql?' , L.empty, L.empty
49
+ include_examples 'not equal using eql?' , L.empty, L[nil]
50
+ include_examples 'not equal using eql?' , L["A"], L.empty
51
+ include_examples 'equal using eql?' , L["A"], L["A"]
52
+ include_examples 'not equal using eql?' , L["A"], L["B"]
53
+ include_examples 'not equal using eql?' , L["A", "B"], L["A"]
54
+ include_examples 'equal using eql?' , L["A", "B", "C"], L["A", "B", "C"]
55
+ include_examples 'not equal using eql?' , L["C", "A", "B"], L["A", "B", "C"]
56
+
57
+ include_examples 'equal using ==' , L['A'], ['A']
58
+ include_examples 'equal using ==' , ['A'], L['A']
59
+
60
+ include_examples 'not equal using eql?' , L['A'], ['A']
61
+ include_examples 'not equal using eql?' , ['A'], L['A']
62
62
  end
@@ -3,37 +3,37 @@ require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
5
  describe "#fill" do
6
- let(:list) { Hamster.list(1, 2, 3, 4, 5, 6) }
6
+ let(:list) { L[1, 2, 3, 4, 5, 6] }
7
7
 
8
8
  it "can replace a range of items at the beginning of a list" do
9
- list.fill(:a, 0, 3).should eql(Hamster.list(:a, :a, :a, 4, 5, 6))
9
+ list.fill(:a, 0, 3).should eql(L[:a, :a, :a, 4, 5, 6])
10
10
  end
11
11
 
12
12
  it "can replace a range of items in the middle of a list" do
13
- list.fill(:a, 3, 2).should eql(Hamster.list(1, 2, 3, :a, :a, 6))
13
+ list.fill(:a, 3, 2).should eql(L[1, 2, 3, :a, :a, 6])
14
14
  end
15
15
 
16
16
  it "can replace a range of items at the end of a list" do
17
- list.fill(:a, 4, 2).should eql(Hamster.list(1, 2, 3, 4, :a, :a))
17
+ list.fill(:a, 4, 2).should eql(L[1, 2, 3, 4, :a, :a])
18
18
  end
19
19
 
20
20
  it "can replace all the items in a list" do
21
- list.fill(:a, 0, 6).should eql(Hamster.list(:a, :a, :a, :a, :a, :a))
21
+ list.fill(:a, 0, 6).should eql(L[:a, :a, :a, :a, :a, :a])
22
22
  end
23
23
 
24
24
  it "can fill past the end of the list" do
25
- list.fill(:a, 3, 6).should eql(Hamster.list(1, 2, 3, :a, :a, :a, :a, :a, :a))
25
+ list.fill(:a, 3, 6).should eql(L[1, 2, 3, :a, :a, :a, :a, :a, :a])
26
26
  end
27
27
 
28
28
  context "with 1 argument" do
29
29
  it "replaces all the items in the list by default" do
30
- list.fill(:a).should eql(Hamster.list(:a, :a, :a, :a, :a, :a))
30
+ list.fill(:a).should eql(L[:a, :a, :a, :a, :a, :a])
31
31
  end
32
32
  end
33
33
 
34
34
  context "with 2 arguments" do
35
35
  it "replaces up to the end of the list by default" do
36
- list.fill(:a, 4).should eql(Hamster.list(1, 2, 3, 4, :a, :a))
36
+ list.fill(:a, 4).should eql(L[1, 2, 3, 4, :a, :a])
37
37
  end
38
38
  end
39
39
 
@@ -2,8 +2,8 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- let(:list) { Hamster.list(*values) }
6
- let(:found_list) { Hamster.list(*found_values) }
5
+ let(:list) { L[*values] }
6
+ let(:found_list) { L[*found_values] }
7
7
 
8
8
  describe "#find_all" do
9
9
  it "is lazy" do
@@ -15,7 +15,7 @@ describe Hamster::List do
15
15
  let(:find_all) { list.find_all { |item| item == item.upcase } }
16
16
 
17
17
  it "preserves the original" do
18
- expect(list).to eq(Hamster.list(*values))
18
+ expect(list).to eq(L[*values])
19
19
  end
20
20
 
21
21
  it "returns the found list" do
@@ -27,7 +27,7 @@ describe Hamster::List do
27
27
  ].each do |values, item, expected|
28
28
  context "looking for #{item.inspect} in #{values.inspect}" do
29
29
  it "returns #{expected.inspect}" do
30
- Hamster.list(*values).send(method) { |x| x == item }.should == expected
30
+ L[*values].send(method) { |x| x == item }.should == expected
31
31
  end
32
32
  end
33
33
  end
@@ -22,7 +22,7 @@ describe Hamster::List do
22
22
  [["A", "B", nil], "C", nil],
23
23
  ].each do |values, item, expected|
24
24
  context "on #{values.inspect}" do
25
- let(:list) { Hamster.list(*values) }
25
+ let(:list) { L[*values] }
26
26
 
27
27
  context "with a block" do
28
28
  it "returns #{expected.inspect}" do
@@ -2,12 +2,12 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- let(:list) { Hamster.list(*values) }
5
+ let(:list) { L[*values] }
6
6
 
7
7
  describe "#flat_map" do
8
8
  let(:block) { ->(item) { [item, item + 1, item * item] } }
9
9
  let(:flat_map) { list.flat_map(&block) }
10
- let(:flattened_list) { Hamster.list(*flattened_values) }
10
+ let(:flattened_list) { L[*flattened_values] }
11
11
 
12
12
  shared_examples "checking flattened result" do
13
13
 
@@ -11,19 +11,19 @@ describe Hamster do
11
11
  [[], []],
12
12
  [["A"], ["A"]],
13
13
  [%w[A B C], %w[A B C]],
14
- [["A", Hamster.list("B"), "C"], %w[A B C]],
15
- [[Hamster.list("A"), Hamster.list("B"), Hamster.list("C")], %w[A B C]],
14
+ [["A", L["B"], "C"], %w[A B C]],
15
+ [[L["A"], L["B"], L["C"]], %w[A B C]],
16
16
  ].each do |values, expected|
17
17
  context "on #{values}" do
18
- let(:list) { Hamster.list(*values) }
18
+ let(:list) { L[*values] }
19
19
 
20
20
  it "preserves the original" do
21
21
  list.flatten
22
- list.should eql(Hamster.list(*values))
22
+ list.should eql(L[*values])
23
23
  end
24
24
 
25
25
  it "returns an empty list" do
26
- list.flatten.should eql(Hamster.list(*expected))
26
+ list.flatten.should eql(L[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -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).grep(String).should eql(Hamster.list(*expected))
19
+ L[*values].grep(String).should eql(L[*expected])
20
20
  end
21
21
  end
22
22
  end
@@ -30,15 +30,15 @@ describe Hamster::List do
30
30
  [["A", 2, "C"], %w[a c]],
31
31
  ].each do |values, expected|
32
32
  context "on #{values.inspect}" do
33
- let(:list) { Hamster.list(*values) }
33
+ let(:list) { L[*values] }
34
34
 
35
35
  it "preserves the original" do
36
36
  list.grep(String, &:downcase)
37
- list.should eql(Hamster.list(*values))
37
+ list.should eql(L[*values])
38
38
  end
39
39
 
40
40
  it "returns #{expected.inspect}" do
41
- list.grep(String, &:downcase).should eql(Hamster.list(*expected))
41
+ list.grep(String, &:downcase).should eql(L[*expected])
42
42
  end
43
43
  end
44
44
  end
@@ -13,12 +13,12 @@ describe Hamster::List do
13
13
  context "with a block" do
14
14
  [
15
15
  [[], []],
16
- [[1], [true => Hamster.list(1)]],
17
- [[1, 2, 3, 4], [true => Hamster.list(3, 1), false => Hamster.list(4, 2)]],
16
+ [[1], [true => L[1]]],
17
+ [[1, 2, 3, 4], [true => L[3, 1], false => L[4, 2]]],
18
18
  ].each do |values, expected|
19
19
  context "on #{values.inspect}" do
20
20
  it "returns #{expected.inspect}" do
21
- Hamster.list(*values).send(method, &:odd?).should eql(Hamster.hash(*expected))
21
+ L[*values].send(method, &:odd?).should eql(H[*expected])
22
22
  end
23
23
  end
24
24
  end
@@ -27,12 +27,12 @@ describe Hamster::List do
27
27
  context "without a block" do
28
28
  [
29
29
  [[], []],
30
- [[1], [1 => Hamster.list(1)]],
31
- [[1, 2, 3, 4], [1 => Hamster.list(1), 2 => Hamster.list(2), 3 => Hamster.list(3), 4 => Hamster.list(4)]],
30
+ [[1], [1 => L[1]]],
31
+ [[1, 2, 3, 4], [1 => L[1], 2 => L[2], 3 => L[3], 4 => L[4]]],
32
32
  ].each do |values, expected|
33
33
  context "on #{values.inspect}" do
34
34
  it "returns #{expected.inspect}" do
35
- Hamster.list(*values).send(method).should eql(Hamster.hash(*expected))
35
+ L[*values].send(method).should eql(H[*expected])
36
36
  end
37
37
  end
38
38
  end
@@ -11,12 +11,12 @@ describe Hamster::List do
11
11
 
12
12
  context "on an empty list" do
13
13
  it "returns 0" do
14
- expect(Hamster.list.hash).to eq(0)
14
+ expect(L.empty.hash).to eq(0)
15
15
  end
16
16
  end
17
17
 
18
18
  it "values are sufficiently distributed" do
19
- (1..4000).each_slice(4).map { |a, b, c, d| Hamster.list(a, b, c, d).hash }.uniq.size.should == 1000
19
+ (1..4000).each_slice(4).map { |a, b, c, d| L[a, b, c, d].hash }.uniq.size.should == 1000
20
20
  end
21
21
  end
22
22
  end
@@ -11,7 +11,7 @@ describe Hamster::List do
11
11
  ].each do |values, expected|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns #{expected.inspect}" do
14
- Hamster.list(*values).send(method).should == expected
14
+ L[*values].send(method).should == expected
15
15
  end
16
16
  end
17
17
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:include?, :member?, :contains?, :elem?].each do |method|
5
+ [:include?, :member?].each do |method|
6
6
  describe "##{method}" do
7
7
  context "on a really big list" do
8
8
  it "doesn't run out of stack" do
@@ -27,7 +27,7 @@ describe Hamster::List do
27
27
  ].each do |values, item, expected|
28
28
  context "on #{values.inspect}" do
29
29
  it "returns #{expected.inspect}" do
30
- Hamster.list(*values).send(method, item).should == expected
30
+ L[*values].send(method, item).should == expected
31
31
  end
32
32
  end
33
33
  end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+ require "hamster/list"
3
+
4
+ describe Hamster::List do
5
+ describe "#index" 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).index(nil) }.should_not raise_error
9
+ end
10
+ end
11
+
12
+ [
13
+ [[], "A", nil],
14
+ [[], nil, nil],
15
+ [["A"], "A", 0],
16
+ [["A"], "B", nil],
17
+ [["A"], nil, nil],
18
+ [["A", "B", nil], "A", 0],
19
+ [["A", "B", nil], "B", 1],
20
+ [["A", "B", nil], nil, 2],
21
+ [["A", "B", nil], "C", nil],
22
+ [[2], 2, 0],
23
+ [[2], 2.0, 0],
24
+ [[2.0], 2.0, 0],
25
+ [[2.0], 2, 0],
26
+ ].each do |values, item, expected|
27
+ context "looking for #{item.inspect} in #{values.inspect}" do
28
+ it "returns #{expected.inspect}" do
29
+ if RUBY_ENGINE == 'jruby' && RUBY_VERSION <= '2.2.2' && values[0].is_a?(Fixnum) && item.is_a?(Float)
30
+ skip "On JRuby, Enumerable#find_index doesn't test equality properly"
31
+ else
32
+ L[*values].index(item).should == expected
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+ require "hamster/list"
3
+
4
+ describe Hamster::List do
5
+ describe "#indices" do
6
+ context "when called with a block" do
7
+ it "is lazy" do
8
+ count = 0
9
+ Hamster.stream { count += 1 }.indices { |item| true }
10
+ count.should <= 1
11
+ end
12
+
13
+ context "on a large list which doesn't contain desired item" do
14
+ it "doesn't blow the stack" do
15
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).indices { |x| x < 0 }.size }.should_not raise_error
16
+ end
17
+ end
18
+
19
+ [
20
+ [[], "A", []],
21
+ [["A"], "B", []],
22
+ [%w[A B A], "B", [1]],
23
+ [%w[A B A], "A", [0, 2]],
24
+ [[2], 2, [0]],
25
+ [[2], 2.0, [0]],
26
+ [[2.0], 2.0, [0]],
27
+ [[2.0], 2, [0]],
28
+ ].each do |values, item, expected|
29
+ context "looking for #{item.inspect} in #{values.inspect}" do
30
+ it "returns #{expected.inspect}" do
31
+ L[*values].indices { |x| x == item }.should eql(L[*expected])
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ context "when called with a single argument" do
38
+ it "is lazy" do
39
+ count = 0
40
+ Hamster.stream { count += 1 }.indices(nil)
41
+ count.should <= 1
42
+ end
43
+
44
+ [
45
+ [[], "A", []],
46
+ [["A"], "B", []],
47
+ [%w[A B A], "B", [1]],
48
+ [%w[A B A], "A", [0, 2]],
49
+ [[2], 2, [0]],
50
+ [[2], 2.0, [0]],
51
+ [[2.0], 2.0, [0]],
52
+ [[2.0], 2, [0]],
53
+ ].each do |values, item, expected|
54
+ context "looking for #{item.inspect} in #{values.inspect}" do
55
+ it "returns #{expected.inspect}" do
56
+ L[*values].indices(item).should eql(L[*expected])
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -13,15 +13,15 @@ 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
  it "preserves the original" do
19
19
  list.init
20
- list.should eql(Hamster.list(*values))
20
+ list.should eql(L[*values])
21
21
  end
22
22
 
23
23
  it "returns the list without the last element: #{expected.inspect}" do
24
- list.init.should eql(Hamster.list(*expected))
24
+ list.init.should eql(L[*expected])
25
25
  end
26
26
  end
27
27
  end
@@ -13,15 +13,15 @@ describe Hamster::List do
13
13
  [%w[A B C], [L["A"], L["A", "B"], L["A", "B", "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.inits
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.inits.should eql(Hamster.list(*expected))
24
+ list.inits.should eql(L[*expected])
25
25
  end
26
26
  end
27
27
  end
@@ -3,7 +3,7 @@ require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
5
  describe "#insert" do
6
- let(:original) { Hamster.list(1, 2, 3) }
6
+ let(:original) { L[1, 2, 3] }
7
7
 
8
8
  it "can add items at the beginning of a list" do
9
9
  list = original.insert(0, :a, :b)
@@ -15,7 +15,7 @@ describe Hamster::List do
15
15
  [%w[A B C], 'Hamster::List["A", "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 "returns #{expected.inspect}" do
21
21
  list.inspect.should == expected
@@ -13,15 +13,15 @@ describe Hamster::List do
13
13
  [%w[A B C], ["A", "|", "B", "|", "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.intersperse("|")
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.intersperse("|").should eql(Hamster.list(*expected))
24
+ list.intersperse("|").should eql(L[*expected])
25
25
  end
26
26
  end
27
27
  end