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
@@ -0,0 +1,175 @@
1
+ require "spec_helper"
2
+ require "hamster/vector"
3
+
4
+ describe Hamster::Vector do
5
+ let(:vector) { V[*values] }
6
+
7
+ describe "#put" do
8
+ context "when empty" do
9
+ let(:vector) { V.empty }
10
+
11
+ it "raises an error for index -1" do
12
+ expect { vector.put(-1, :a) }.to raise_error
13
+ end
14
+
15
+ it "allows indexes 0 and 1 to be put" do
16
+ vector.put(0, :a).should eql(V[:a])
17
+ vector.put(1, :a).should eql(V[nil, :a])
18
+ end
19
+ end
20
+
21
+ context "when not empty" do
22
+ let(:vector) { V["A", "B", "C"] }
23
+
24
+ context "with a block" do
25
+ context "and a positive index" do
26
+ context "within the absolute bounds of the vector" do
27
+ it "passes the current value to the block" do
28
+ vector.put(1) { |value| value.should == "B" }
29
+ end
30
+
31
+ it "replaces the value with the result of the block" do
32
+ result = vector.put(1) { |value| "FLIBBLE" }
33
+ result.should eql(V["A", "FLIBBLE", "C"])
34
+ end
35
+
36
+ it "supports to_proc methods" do
37
+ result = vector.put(1, &:downcase)
38
+ result.should eql(V["A", "b", "C"])
39
+ end
40
+ end
41
+
42
+ context "just past the end of the vector" do
43
+ it "passes nil to the block and adds a new value" do
44
+ result = vector.put(3) { |value| value.should be_nil; "D" }
45
+ result.should eql(V["A", "B", "C", "D"])
46
+ end
47
+ end
48
+
49
+ context "further outside the bounds of the vector" do
50
+ it "passes nil to the block, fills up missing nils, and adds a new value" do
51
+ result = vector.put(5) { |value| value.should be_nil; "D" }
52
+ result.should eql(V["A", "B", "C", nil, nil, "D"])
53
+ end
54
+ end
55
+ end
56
+
57
+ context "and a negative index" do
58
+ context "within the absolute bounds of the vector" do
59
+ it "passes the current value to the block" do
60
+ vector.put(-2) { |value| value.should == "B" }
61
+ end
62
+
63
+ it "replaces the value with the result of the block" do
64
+ result = vector.put(-2) { |value| "FLIBBLE" }
65
+ result.should eql(V["A", "FLIBBLE", "C"])
66
+ end
67
+
68
+ it "supports to_proc methods" do
69
+ result = vector.put(-2, &:downcase)
70
+ result.should eql(V["A", "b", "C"])
71
+ end
72
+ end
73
+
74
+ context "outside the absolute bounds of the vector" do
75
+ it "raises an error" do
76
+ expect { vector.put(-vector.size.next) {} }.to raise_error
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ context "with a value" do
83
+ context "and a positive index" do
84
+ context "within the absolute bounds of the vector" do
85
+ let(:put) { vector.put(1, "FLIBBLE") }
86
+
87
+ it "preserves the original" do
88
+ vector.should eql(V["A", "B", "C"])
89
+ end
90
+
91
+ it "puts the new value at the specified index" do
92
+ put.should eql(V["A", "FLIBBLE", "C"])
93
+ end
94
+ end
95
+
96
+ context "just past the end of the vector" do
97
+ it "adds a new value" do
98
+ result = vector.put(3, "FLIBBLE")
99
+ result.should eql(V["A", "B", "C", "FLIBBLE"])
100
+ end
101
+ end
102
+
103
+ context "outside the absolute bounds of the vector" do
104
+ it "fills up with nils" do
105
+ result = vector.put(5, "FLIBBLE")
106
+ result.should eql(V["A", "B", "C", nil, nil, "FLIBBLE"])
107
+ end
108
+ end
109
+ end
110
+
111
+ context "with a negative index" do
112
+ let(:put) { vector.put(-2, "FLIBBLE") }
113
+
114
+ it "preserves the original" do
115
+ put
116
+ vector.should eql(V["A", "B", "C"])
117
+ end
118
+
119
+ it "puts the new value at the specified index" do
120
+ put.should eql(V["A", "FLIBBLE", "C"])
121
+ end
122
+ end
123
+
124
+ context "outside the absolute bounds of the vector" do
125
+ it "raises an error" do
126
+ expect { vector.put(-vector.size.next, "FLIBBLE") }.to raise_error
127
+ end
128
+ end
129
+ end
130
+ end
131
+
132
+ context "from a subclass" do
133
+ it "returns an instance of the subclass" do
134
+ subclass = Class.new(Hamster::Vector)
135
+ instance = subclass[1,2,3]
136
+ instance.put(1, 2.5).class.should be(subclass)
137
+ end
138
+ end
139
+
140
+ [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
141
+ context "on a #{size}-item vector" do
142
+ it "works correctly" do
143
+ array = (1..size).to_a
144
+ vector = V.new(array)
145
+
146
+ [0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
147
+ value = rand(10000)
148
+ array[i] = value
149
+ vector = vector.put(i, value)
150
+ vector[i].should be(value)
151
+ end
152
+
153
+ 0.upto(size-1) do |i|
154
+ vector.get(i).should == array[i]
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ context "with an identical value to an existing item" do
161
+ [1, 2, 5, 31,32, 33, 100, 200].each do |size|
162
+ context "on a #{size}-item vector" do
163
+ let(:array) { (0...size).map { |x| x * x} }
164
+ let(:vector) { V.new(array) }
165
+
166
+ it "returns self" do
167
+ (0...size).each do |index|
168
+ vector.put(index, index * index).should equal(vector)
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:reduce, :inject, :fold].each do |method|
5
+ [:reduce, :inject].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], 10, 10],
@@ -10,7 +10,7 @@ describe Hamster::Vector do
10
10
  [[1, 2, 3], 10, 4],
11
11
  ].each do |values, initial, expected|
12
12
  describe "on #{values.inspect}" do
13
- let(:vector) { Hamster.vector(*values) }
13
+ let(:vector) { V[*values] }
14
14
 
15
15
  describe "with an initial value of #{initial}" do
16
16
  describe "and a block" do
@@ -28,7 +28,7 @@ describe Hamster::Vector do
28
28
  [[1, 2, 3], -4],
29
29
  ].each do |values, expected|
30
30
  describe "on #{values.inspect}" do
31
- let(:vector) { Hamster.vector(*values) }
31
+ let(:vector) { V[*values] }
32
32
 
33
33
  describe "with no initial value" do
34
34
  describe "and a block" do
@@ -42,67 +42,15 @@ describe Hamster::Vector do
42
42
 
43
43
  describe "with no block and a symbol argument" do
44
44
  it "uses the symbol as the name of a method to reduce with" do
45
- Hamster.vector(1, 2, 3).send(method, :+).should == 6
45
+ V[1, 2, 3].send(method, :+).should == 6
46
46
  end
47
47
  end
48
48
 
49
49
  describe "with no block and a string argument" do
50
50
  it "uses the string as the name of a method to reduce with" do
51
- Hamster.vector(1, 2, 3).send(method, '+').should == 6
51
+ V[1, 2, 3].send(method, '+').should == 6
52
52
  end
53
53
  end
54
54
  end
55
55
  end
56
-
57
- describe "#foldr" do
58
- [
59
- [[], 10, 10],
60
- [[1], 10, 9],
61
- [[1, 2, 3], 10, 4],
62
- ].each do |values, initial, expected|
63
-
64
- describe "on #{values.inspect}" do
65
- let(:vector) { Hamster.vector(*values) }
66
-
67
- describe "with an initial value of #{initial}" do
68
- describe "and a block" do
69
- it "returns #{expected.inspect}" do
70
- vector.foldr(initial) { |memo, item| memo - item }.should == expected
71
- end
72
- end
73
- end
74
- end
75
- end
76
-
77
- [
78
- [[], nil],
79
- [[1], 1],
80
- [[1, 2, 3], 0],
81
- [[1, 2, 3, 4], -2]
82
- ].each do |values, expected|
83
- describe "on #{values.inspect}" do
84
- let(:vector) { Hamster.vector(*values) }
85
-
86
- describe "with no initial value" do
87
- describe "and a block" do
88
- it "returns #{expected.inspect}" do
89
- vector.foldr { |memo, item| memo - item }.should == expected
90
- end
91
- end
92
- end
93
- end
94
- end
95
-
96
- describe "with no block and a symbol argument" do
97
- it "uses the symbol as the name of a method to reduce with" do
98
- Hamster.vector(1, 2, 3).foldr(:+).should == 6
99
- end
100
- end
101
-
102
- describe "with no block and a string argument" do
103
- it "uses the string as the name of a method to reduce with" do
104
- Hamster.vector(1, 2, 3).foldr('+').should == 6
105
- end
106
- end
107
- end
108
56
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:remove, :reject, :delete_if].each do |method|
5
+ [:reject, :delete_if].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], []],
@@ -12,18 +12,18 @@ describe Hamster::Vector do
12
12
  [%w[a b c], []],
13
13
  ].each do |values, expected|
14
14
  describe "on #{values.inspect}" do
15
- let(:vector) { Hamster.vector(*values) }
15
+ let(:vector) { V[*values] }
16
16
 
17
17
  context "with a block" do
18
18
  it "returns #{expected.inspect}" do
19
- vector.send(method) { |item| item == item.downcase }.should eql(Hamster.vector(*expected))
19
+ vector.send(method) { |item| item == item.downcase }.should eql(V[*expected])
20
20
  end
21
21
  end
22
22
 
23
23
  context "without a block" do
24
24
  it "returns an Enumerator" do
25
25
  vector.send(method).class.should be(Enumerator)
26
- vector.send(method).each { |item| item == item.downcase }.should eql(Hamster.vector(*expected))
26
+ vector.send(method).each { |item| item == item.downcase }.should eql(V[*expected])
27
27
  end
28
28
  end
29
29
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#repeated_combination" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
6
+ let(:vector) { V[1,2,3,4] }
7
7
 
8
8
  context "with no block" do
9
9
  it "returns an Enumerator" do
@@ -44,7 +44,7 @@ describe Hamster::Vector do
44
44
  context "on an empty vector, with an argument greater than zero" do
45
45
  it "yields nothing" do
46
46
  result = []
47
- Hamster.vector.repeated_combination(1) { |obj| result << obj }
47
+ V.empty.repeated_combination(1) { |obj| result << obj }
48
48
  result.should eql([])
49
49
  end
50
50
  end
@@ -55,14 +55,14 @@ describe Hamster::Vector do
55
55
  vector.repeated_combination(3).to_a.should == [[1,1,1], [1,1,2], [1,1,3], [1,1,4],
56
56
  [1,2,2], [1,2,3], [1,2,4], [1,3,3], [1,3,4], [1,4,4], [2,2,2], [2,2,3],
57
57
  [2,2,4], [2,3,3], [2,3,4], [2,4,4], [3,3,3], [3,3,4], [3,4,4], [4,4,4]]
58
- Hamster.vector(1,2,3).repeated_combination(3).to_a.should == [[1,1,1], [1,1,2],
58
+ V[1,2,3].repeated_combination(3).to_a.should == [[1,1,1], [1,1,2],
59
59
  [1,1,3], [1,2,2], [1,2,3], [1,3,3], [2,2,2], [2,2,3], [2,3,3], [3,3,3]]
60
60
  end
61
61
  end
62
62
 
63
63
  it "leaves the original unmodified" do
64
64
  vector.repeated_combination(2) {}
65
- vector.should eql(Hamster.vector(1,2,3,4))
65
+ vector.should eql(V[1,2,3,4])
66
66
  end
67
67
 
68
68
  it "behaves like Array#repeated_combination" do
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#repeated_permutation" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
6
+ let(:vector) { V[1,2,3,4] }
7
7
 
8
8
  context "without a block" do
9
9
  context "and without argument" do
@@ -31,7 +31,7 @@ describe Hamster::Vector do
31
31
  context "on an empty vector" do
32
32
  it "yields the empty permutation" do
33
33
  yielded = []
34
- Hamster.vector.repeated_permutation { |obj| yielded << obj }
34
+ V.empty.repeated_permutation { |obj| yielded << obj }
35
35
  yielded.should eql([[]])
36
36
  end
37
37
  end
@@ -47,7 +47,7 @@ describe Hamster::Vector do
47
47
  context "with no argument" do
48
48
  it "yields all repeated permutations" do
49
49
  yielded = []
50
- Hamster.vector(1,2,3).repeated_permutation { |obj| yielded << obj }
50
+ V[1,2,3].repeated_permutation { |obj| yielded << obj }
51
51
  yielded.sort.should eql([[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2],
52
52
  [1,2,3], [1,3,1], [1,3,2], [1,3,3], [2,1,1], [2,1,2], [2,1,3], [2,2,1],
53
53
  [2,2,2], [2,2,3], [2,3,1], [2,3,2], [2,3,3], [3,1,1], [3,1,2], [3,1,3],
@@ -66,12 +66,12 @@ describe Hamster::Vector do
66
66
  end
67
67
 
68
68
  it "handles duplicate elements correctly" do
69
- Hamster.vector(10,11,10).repeated_permutation(2).sort.should eql([[10, 10], [10, 10],
69
+ V[10,11,10].repeated_permutation(2).sort.should eql([[10, 10], [10, 10],
70
70
  [10, 10], [10, 10], [10, 11], [10, 11], [11, 10], [11, 10], [11, 11]])
71
71
  end
72
72
 
73
73
  it "allows permutations larger than the number of elements" do
74
- Hamster.vector(1,2).repeated_permutation(3).sort.should eql(
74
+ V[1,2].repeated_permutation(3).sort.should eql(
75
75
  [[1, 1, 1], [1, 1, 2], [1, 2, 1],
76
76
  [1, 2, 2], [2, 1, 1], [2, 1, 2],
77
77
  [2, 2, 1], [2, 2, 2]])
@@ -79,7 +79,7 @@ describe Hamster::Vector do
79
79
 
80
80
  it "leaves the original unmodified" do
81
81
  vector.repeated_permutation(2) {}
82
- vector.should eql(Hamster.vector(1,2,3,4))
82
+ vector.should eql(V[1,2,3,4])
83
83
  end
84
84
 
85
85
  it "behaves like Array#repeated_permutation" do
@@ -5,7 +5,7 @@ describe Hamster::Vector do
5
5
  describe "#reverse_each" do
6
6
  [2, 31, 32, 33, 1000, 1024, 1025, 2000].each do |size|
7
7
  context "on a #{size}-item vector" do
8
- let(:vector) { Hamster.vector(1..size) }
8
+ let(:vector) { V[1..size] }
9
9
 
10
10
  context "with a block (internal iteration)" do
11
11
  it "returns self" do
@@ -14,7 +14,7 @@ describe Hamster::Vector do
14
14
  ].each do |initial, expected|
15
15
  describe "on #{initial}" do
16
16
  it "returns #{expected}" do
17
- Hamster::Vector.new(initial).reverse.should eql(Hamster::Vector.new(expected))
17
+ V.new(initial).reverse.should eql(V.new(expected))
18
18
  end
19
19
  end
20
20
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#rindex" do
6
- let(:vector) { Hamster.vector(1,2,3,3,2,1) }
6
+ let(:vector) { V[1,2,3,3,2,1] }
7
7
 
8
8
  context "when passed an object present in the vector" do
9
9
  it "returns the last index where the object is present" do
@@ -3,27 +3,27 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#rotate" do
6
- let(:vector) { Hamster.vector(1,2,3,4,5) }
6
+ let(:vector) { V[1,2,3,4,5] }
7
7
 
8
8
  context "when passed no argument" do
9
9
  it "returns a new vector with the first element moved to the end" do
10
- vector.rotate.should eql(Hamster.vector(2,3,4,5,1))
10
+ vector.rotate.should eql(V[2,3,4,5,1])
11
11
  end
12
12
  end
13
13
 
14
14
  context "with an integral argument n" do
15
15
  it "returns a new vector with the first (n % size) elements moved to the end" do
16
- vector.rotate(2).should eql(Hamster.vector(3,4,5,1,2))
17
- vector.rotate(3).should eql(Hamster.vector(4,5,1,2,3))
18
- vector.rotate(4).should eql(Hamster.vector(5,1,2,3,4))
19
- vector.rotate(5).should eql(Hamster.vector(1,2,3,4,5))
20
- vector.rotate(-1).should eql(Hamster.vector(5,1,2,3,4))
16
+ vector.rotate(2).should eql(V[3,4,5,1,2])
17
+ vector.rotate(3).should eql(V[4,5,1,2,3])
18
+ vector.rotate(4).should eql(V[5,1,2,3,4])
19
+ vector.rotate(5).should eql(V[1,2,3,4,5])
20
+ vector.rotate(-1).should eql(V[5,1,2,3,4])
21
21
  end
22
22
  end
23
23
 
24
24
  context "with a floating-point argument n" do
25
25
  it "coerces the argument to integer using to_int" do
26
- vector.rotate(2.1).should eql(Hamster.vector(3,4,5,1,2))
26
+ vector.rotate(2.1).should eql(V[3,4,5,1,2])
27
27
  end
28
28
  end
29
29
 
@@ -68,7 +68,7 @@ describe Hamster::Vector do
68
68
 
69
69
  it "leaves the original unmodified" do
70
70
  vector.rotate(3)
71
- vector.should eql(Hamster.vector(1,2,3,4,5))
71
+ vector.should eql(V[1,2,3,4,5])
72
72
  end
73
73
  end
74
74
  end