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
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#each_index" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
6
+ let(:vector) { V[1,2,3,4] }
7
7
 
8
8
  context "with a block" do
9
9
  it "yields all the valid indices into the vector" do
@@ -26,7 +26,7 @@ describe Hamster::Vector do
26
26
 
27
27
  context "on an empty vector" do
28
28
  it "doesn't yield anything" do
29
- Hamster.vector.each_index { fail }
29
+ V.empty.each_index { fail }
30
30
  end
31
31
  end
32
32
 
@@ -2,45 +2,43 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:each, :foreach].each do |method|
6
- describe "##{method}" do
7
- describe "with no block" do
8
- let(:vector) { Hamster.vector("A", "B", "C") }
5
+ describe "#each" do
6
+ describe "with no block" do
7
+ let(:vector) { V["A", "B", "C"] }
9
8
 
10
- it "returns an Enumerator" do
11
- vector.send(method).class.should be(Enumerator)
12
- vector.send(method).to_a.should == vector
13
- end
9
+ it "returns an Enumerator" do
10
+ vector.each.class.should be(Enumerator)
11
+ vector.each.to_a.should == vector
14
12
  end
13
+ end
15
14
 
16
- [31, 32, 33, 1023, 1024, 1025].each do |size|
17
- context "on a #{size}-item vector" do
18
- describe "with a block" do
19
- let(:vector) { V.new(1..size) }
15
+ [31, 32, 33, 1023, 1024, 1025].each do |size|
16
+ context "on a #{size}-item vector" do
17
+ describe "with a block" do
18
+ let(:vector) { V.new(1..size) }
20
19
 
21
- it "returns self" do
22
- items = []
23
- vector.send(method) { |item| items << item }.should be(vector)
24
- end
20
+ it "returns self" do
21
+ items = []
22
+ vector.each { |item| items << item }.should be(vector)
23
+ end
25
24
 
26
- it "yields all the items" do
27
- items = []
28
- vector.send(method) { |item| items << item }
29
- items.should == (1..size).to_a
30
- end
25
+ it "yields all the items" do
26
+ items = []
27
+ vector.each { |item| items << item }
28
+ items.should == (1..size).to_a
29
+ end
31
30
 
32
- it "iterates over the items in order" do
33
- vector.send(method).first.should == 1
34
- vector.send(method).to_a.last.should == size
35
- end
31
+ it "iterates over the items in order" do
32
+ vector.each.first.should == 1
33
+ vector.each.to_a.last.should == size
36
34
  end
37
35
  end
38
36
  end
37
+ end
39
38
 
40
- context "on an empty vector" do
41
- it "doesn't yield anything" do
42
- Hamster.vector.each { fail }
43
- end
39
+ context "on an empty vector" do
40
+ it "doesn't yield anything" do
41
+ V.empty.each { fail }
44
42
  end
45
43
  end
46
44
  end
@@ -4,7 +4,7 @@ require "hamster/vector"
4
4
  describe Hamster::Vector do
5
5
  describe "#each_with_index" do
6
6
  describe "with no block" do
7
- let(:vector) { Hamster.vector("A", "B", "C") }
7
+ let(:vector) { V["A", "B", "C"] }
8
8
 
9
9
  it "returns an Enumerator" do
10
10
  vector.each_with_index.class.should be(Enumerator)
@@ -33,7 +33,7 @@ describe Hamster::Vector do
33
33
 
34
34
  context "on an empty vector" do
35
35
  it "doesn't yield anything" do
36
- Hamster.vector.each_with_index { |item, index| fail }
36
+ V.empty.each_with_index { |item, index| fail }
37
37
  end
38
38
  end
39
39
  end
@@ -2,17 +2,15 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:empty?, :null?].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], true],
9
- [["A"], false],
10
- [%w[A B C], false],
11
- ].each do |values, expected|
12
- describe "on #{values.inspect}" do
13
- it "returns #{expected.inspect}" do
14
- Hamster.vector(*values).send(method).should == expected
15
- end
5
+ describe "#empty?" do
6
+ [
7
+ [[], true],
8
+ [["A"], false],
9
+ [%w[A B C], false],
10
+ ].each do |values, expected|
11
+ describe "on #{values.inspect}" do
12
+ it "returns #{expected.inspect}" do
13
+ V[*values].empty?.should == expected
16
14
  end
17
15
  end
18
16
  end
@@ -20,8 +18,8 @@ describe Hamster::Vector do
20
18
 
21
19
  describe ".empty" do
22
20
  it "returns the canonical empty vector" do
23
- Hamster::Vector.empty.size.should be(0)
24
- Hamster::Vector.empty.object_id.should be(Hamster::Vector.empty.object_id)
21
+ V.empty.size.should be(0)
22
+ V.empty.object_id.should be(V.empty.object_id)
25
23
  end
26
24
 
27
25
  context "from a subclass" do
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#eql" do
6
- let(:vector) { Hamster.vector("A", "B", "C") }
6
+ let(:vector) { V["A", "B", "C"] }
7
7
 
8
8
  it "returns false when comparing with an array with the same contents" do
9
9
  vector.eql?(%w[A B C]).should == false
@@ -14,7 +14,7 @@ describe Hamster::Vector do
14
14
  end
15
15
 
16
16
  it "returns false when comparing an empty vector with an empty array" do
17
- Hamster.vector.eql?([]).should == false
17
+ V.empty.eql?([]).should == false
18
18
  end
19
19
 
20
20
  it "returns false when comparing with a subclass of Hamster::Vector" do
@@ -23,7 +23,7 @@ describe Hamster::Vector do
23
23
  end
24
24
 
25
25
  describe "#==" do
26
- let(:vector) { Hamster.vector("A", "B", "C") }
26
+ let(:vector) { V["A", "B", "C"] }
27
27
 
28
28
  it "returns true when comparing with an array with the same contents" do
29
29
  (vector == %w[A B C]).should == true
@@ -34,7 +34,7 @@ describe Hamster::Vector do
34
34
  end
35
35
 
36
36
  it "returns true when comparing an empty vector with an empty array" do
37
- (Hamster.vector == []).should == true
37
+ (V.empty == []).should == true
38
38
  end
39
39
 
40
40
  it "returns true when comparing with a subclass of Hamster::Vector" do
@@ -60,8 +60,8 @@ describe Hamster::Vector do
60
60
  [%w[C A B], %w[A B C], false],
61
61
  ].each do |a, b, expected|
62
62
  describe "returns #{expected.inspect}" do
63
- let(:vector_a) { Hamster.vector(*a) }
64
- let(:vector_b) { Hamster.vector(*b) }
63
+ let(:vector_a) { V[*a] }
64
+ let(:vector_b) { V[*b] }
65
65
 
66
66
  it "for vectors #{a.inspect} and #{b.inspect}" do
67
67
  vector_a.send(method, vector_b).should == expected
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#fetch" do
6
- let(:vector) { Hamster.vector('a', 'b', 'c') }
6
+ let(:vector) { V['a', 'b', 'c'] }
7
7
 
8
8
  context "with no default provided" do
9
9
  context "when the index exists" do
@@ -3,37 +3,37 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#fill" do
6
- let(:vector) { Hamster.vector(1, 2, 3, 4, 5, 6) }
6
+ let(:vector) { V[1, 2, 3, 4, 5, 6] }
7
7
 
8
8
  it "can replace a range of items at the beginning of a vector" do
9
- vector.fill(:a, 0, 3).should eql(Hamster.vector(:a, :a, :a, 4, 5, 6))
9
+ vector.fill(:a, 0, 3).should eql(V[: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 vector" do
13
- vector.fill(:a, 3, 2).should eql(Hamster.vector(1, 2, 3, :a, :a, 6))
13
+ vector.fill(:a, 3, 2).should eql(V[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 vector" do
17
- vector.fill(:a, 4, 2).should eql(Hamster.vector(1, 2, 3, 4, :a, :a))
17
+ vector.fill(:a, 4, 2).should eql(V[1, 2, 3, 4, :a, :a])
18
18
  end
19
19
 
20
20
  it "can replace all the items in a vector" do
21
- vector.fill(:a, 0, 6).should eql(Hamster.vector(:a, :a, :a, :a, :a, :a))
21
+ vector.fill(:a, 0, 6).should eql(V[:a, :a, :a, :a, :a, :a])
22
22
  end
23
23
 
24
24
  it "can fill past the end of the vector" do
25
- vector.fill(:a, 3, 6).should eql(Hamster.vector(1, 2, 3, :a, :a, :a, :a, :a, :a))
25
+ vector.fill(:a, 3, 6).should eql(V[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 vector by default" do
30
- vector.fill(:a).should eql(Hamster.vector(:a, :a, :a, :a, :a, :a))
30
+ vector.fill(:a).should eql(V[: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 vector by default" do
36
- vector.fill(:a, 4).should eql(Hamster.vector(1, 2, 3, 4, :a, :a))
36
+ vector.fill(:a, 4).should eql(V[1, 2, 3, 4, :a, :a])
37
37
  end
38
38
  end
39
39
 
@@ -54,7 +54,7 @@ describe Hamster::Vector do
54
54
  context "on a #{size}-item vector" do
55
55
  it "works the same" do
56
56
  array = (0..size).to_a
57
- vector = Hamster::Vector.new(array)
57
+ vector = V.new(array)
58
58
  [[:a, 0, 5], [:b, 31, 2], [:c, 32, 60], [:d, 1000, 20], [:e, 1024, 33], [:f, 1200, 35]].each do |obj, index, length|
59
59
  next if index > size
60
60
  vector = vector.fill(obj, index, length)
@@ -2,18 +2,16 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:first, :head].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], nil],
9
- [["A"], "A"],
10
- [%w[A B C], "A"],
11
- [(1..32), 1],
12
- ].each do |values, expected|
13
- describe "on #{values.inspect}" do
14
- it "returns #{expected.inspect}" do
15
- Hamster.vector(*values).send(method).should == expected
16
- end
5
+ describe "#first" do
6
+ [
7
+ [[], nil],
8
+ [["A"], "A"],
9
+ [%w[A B C], "A"],
10
+ [(1..32), 1],
11
+ ].each do |values, expected|
12
+ describe "on #{values.inspect}" do
13
+ it "returns #{expected.inspect}" do
14
+ V[*values].first.should == expected
17
15
  end
18
16
  end
19
17
  end
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+ require "hamster/vector"
3
+
4
+ describe Hamster::Vector do
5
+ let(:vector) { V[*values] }
6
+
7
+ describe "#flat_map" do
8
+ let(:block) { ->(item) { [item, item + 1, item * item] } }
9
+ let(:flat_map) { vector.flat_map(&block) }
10
+ let(:flattened_vector) { V[*flattened_values] }
11
+
12
+ shared_examples "checking flattened result" do
13
+ it "returns the flattened values as a Hamster::Vector" do
14
+ expect(flat_map).to eq(flattened_vector)
15
+ end
16
+
17
+ it "returns a Hamster::Vector" do
18
+ expect(flat_map).to be_a(Hamster::Vector)
19
+ end
20
+ end
21
+
22
+ context "with an empty vector" do
23
+ let(:values) { [] }
24
+ let(:flattened_values) { [] }
25
+
26
+ include_examples "checking flattened result"
27
+ end
28
+
29
+ context "with a block that returns an empty vector" do
30
+ let(:block) { ->(item) { [] } }
31
+ let(:values) { [1, 2, 3] }
32
+ let(:flattened_values) { [] }
33
+
34
+ include_examples "checking flattened result"
35
+ end
36
+
37
+ context "with a vector of one item" do
38
+ let(:values) { [7] }
39
+ let(:flattened_values) { [7, 8, 49] }
40
+
41
+ include_examples "checking flattened result"
42
+ end
43
+
44
+ context "with a vector of multiple items" do
45
+ let(:values) { [1, 2, 3] }
46
+ let(:flattened_values) { [1, 2, 1, 2, 3, 4, 3, 4, 9] }
47
+
48
+ include_examples "checking flattened result"
49
+ end
50
+ end
51
+ end
@@ -35,6 +35,21 @@ describe Hamster::Vector do
35
35
  end
36
36
  end
37
37
 
38
+ context "on a vector with no nested vectors" do
39
+ it "returns an unchanged vector" do
40
+ vector = V[1,2,3]
41
+ vector.flatten.should.eql?(V[1,2,3])
42
+ end
43
+
44
+ context "on a Vector larger than 32 items initialized with Vector.new" do
45
+ # Regression test, for problem discovered while working on GH issue #182
46
+ it "returns an unchanged vector" do
47
+ vector1,vector2 = 2.times.collect { V.new(0..33) }
48
+ vector1.flatten.should eql(vector2)
49
+ end
50
+ end
51
+ end
52
+
38
53
  it "leaves the original unmodified" do
39
54
  vector = V[1,2,3]
40
55
  vector.flatten
@@ -7,13 +7,13 @@ describe Hamster::Vector do
7
7
  context "when empty" do
8
8
  it "always returns nil" do
9
9
  (-1..1).each do |i|
10
- Hamster.vector.send(method, i).should be_nil
10
+ V.empty.send(method, i).should be_nil
11
11
  end
12
12
  end
13
13
  end
14
14
 
15
15
  context "when not empty" do
16
- let(:vector) { Hamster.vector(*(1..1025)) }
16
+ let(:vector) { V[*(1..1025)] }
17
17
 
18
18
  context "with a positive index" do
19
19
  context "within the absolute bounds of the vector" do
@@ -54,10 +54,10 @@ describe Hamster::Vector do
54
54
  array = size.times.map { rand(10000) }
55
55
  vector = V.new(array)
56
56
  100.times do
57
- if rand(1) == 0
57
+ if rand(2) == 0
58
58
  value, index = rand(10000), rand(size)
59
59
  array[index] = value
60
- vector = vector.set(index, value)
60
+ vector = vector.put(index, value)
61
61
  else
62
62
  index = rand(array.size)
63
63
  array.delete_at(index)
@@ -6,15 +6,15 @@ describe Hamster::Vector do
6
6
  context "with a block" do
7
7
  [
8
8
  [[], []],
9
- [[1], [true => Hamster.vector(1)]],
10
- [[1, 2, 3, 4], [true => Hamster.vector(1, 3), false => Hamster.vector(2, 4)]],
9
+ [[1], [true => V[1]]],
10
+ [[1, 2, 3, 4], [true => V[1, 3], false => V[2, 4]]],
11
11
  ].each do |values, expected|
12
12
  context "on #{values.inspect}" do
13
- let(:vector) { Hamster.vector(*values) }
13
+ let(:vector) { V[*values] }
14
14
 
15
15
  it "returns #{expected.inspect}" do
16
- vector.group_by(&:odd?).should eql(Hamster.hash(*expected))
17
- vector.should eql(Hamster::Vector.new(values)) # make sure it hasn't changed
16
+ vector.group_by(&:odd?).should eql(H[*expected])
17
+ vector.should eql(V.new(values)) # make sure it hasn't changed
18
18
  end
19
19
  end
20
20
  end
@@ -23,15 +23,15 @@ describe Hamster::Vector do
23
23
  context "without a block" do
24
24
  [
25
25
  [[], []],
26
- [[1], [1 => Hamster.vector(1)]],
27
- [[1, 2, 3, 4], [1 => Hamster.vector(1), 2 => Hamster.vector(2), 3 => Hamster.vector(3), 4 => Hamster.vector(4)]],
26
+ [[1], [1 => V[1]]],
27
+ [[1, 2, 3, 4], [1 => V[1], 2 => V[2], 3 => V[3], 4 => V[4]]],
28
28
  ].each do |values, expected|
29
29
  context "on #{values.inspect}" do
30
- let(:vector) { Hamster.vector(*values) }
30
+ let(:vector) { V[*values] }
31
31
 
32
32
  it "returns #{expected.inspect}" do
33
- vector.group_by.should eql(Hamster.hash(*expected))
34
- vector.should eql(Hamster::Vector.new(values)) # make sure it hasn't changed
33
+ vector.group_by.should eql(H[*expected])
34
+ vector.should eql(V.new(values)) # make sure it hasn't changed
35
35
  end
36
36
  end
37
37
  end
@@ -39,12 +39,12 @@ describe Hamster::Vector do
39
39
 
40
40
  context "on an empty vector" do
41
41
  it "returns an empty hash" do
42
- Hamster.vector.group_by { |x| x }.should eql(Hamster.hash)
42
+ V.empty.group_by { |x| x }.should eql(H.empty)
43
43
  end
44
44
  end
45
45
 
46
46
  it "returns a hash without default proc" do
47
- Hamster.vector(1,2,3).group_by { |x| x }.default_proc.should be_nil
47
+ V[1,2,3].group_by { |x| x }.default_proc.should be_nil
48
48
  end
49
49
 
50
50
  context "from a subclass" do