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 "#sample" do
6
- let(:vector) { Hamster::Vector.new(1..10) }
6
+ let(:vector) { V.new(1..10) }
7
7
 
8
8
  it "returns a randomly chosen item" do
9
9
  chosen = 100.times.map { vector.sample }
@@ -2,42 +2,42 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- [:filter, :select, :find_all].each do |method|
5
+ [:select, :find_all].each do |method|
6
6
  describe "##{method}" do
7
- let(:vector) { Hamster.vector("A", "B", "C") }
7
+ let(:vector) { V["A", "B", "C"] }
8
8
 
9
9
  describe "with a block" do
10
10
  it "preserves the original" do
11
11
  vector.send(method) { |item| item == "A" }
12
- vector.should eql(Hamster.vector("A", "B", "C"))
12
+ vector.should eql(V["A", "B", "C"])
13
13
  end
14
14
 
15
15
  it "returns a vector with the matching values" do
16
- vector.send(method) { |item| item == "A" }.should eql(Hamster.vector("A"))
16
+ vector.send(method) { |item| item == "A" }.should eql(V["A"])
17
17
  end
18
18
  end
19
19
 
20
20
  describe "with no block" do
21
21
  it "returns an Enumerator" do
22
22
  vector.send(method).class.should be(Enumerator)
23
- vector.send(method).each { |item| item == "A" }.should eql(Hamster.vector("A"))
23
+ vector.send(method).each { |item| item == "A" }.should eql(V["A"])
24
24
  end
25
25
  end
26
26
 
27
27
  describe "when nothing matches" do
28
28
  it "preserves the original" do
29
29
  vector.send(method) { |item| false }
30
- vector.should eql(Hamster.vector("A", "B", "C"))
30
+ vector.should eql(V["A", "B", "C"])
31
31
  end
32
32
 
33
33
  it "returns an empty vector" do
34
- vector.send(method) { |item| false }.should equal(Hamster.vector)
34
+ vector.send(method) { |item| false }.should equal(V.empty)
35
35
  end
36
36
  end
37
37
 
38
38
  context "on an empty vector" do
39
39
  it "returns self" do
40
- Hamster.vector.send(method) { |item| true }.should be(Hamster.vector)
40
+ V.empty.send(method) { |item| true }.should be(V.empty)
41
41
  end
42
42
  end
43
43
 
@@ -2,153 +2,24 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
6
5
 
7
- describe "#set" do
8
- context "when empty" do
9
- let(:vector) { Hamster.vector }
10
-
11
- it "always raises an error" do
12
- (-1..1).each do |i|
13
- expect { vector.set(i) }.to raise_error
14
- end
15
- end
16
- end
17
-
18
- context "when not empty" do
19
- let(:vector) { Hamster.vector("A", "B", "C") }
20
-
21
- context "with a block" do
22
- context "and a positive index" do
23
- context "within the absolute bounds of the vector" do
24
- it "passes the current value to the block" do
25
- vector.set(1) { |value| value.should == "B" }
26
- end
27
-
28
- it "replaces the value with the result of the block" do
29
- result = vector.set(1) { |value| "FLIBBLE" }
30
- result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
31
- end
32
-
33
- it "supports to_proc methods" do
34
- result = vector.set(1, &:downcase)
35
- result.should eql(Hamster.vector("A", "b", "C"))
36
- end
37
- end
38
-
39
- context "just past the end of the vector" do
40
- it "passes nil to the block and adds a new value" do
41
- result = vector.set(3) { |value| value.should be_nil; "D" }
42
- result.should eql(Hamster.vector("A", "B", "C", "D"))
43
- end
44
- end
45
-
46
- context "further outside the bounds of the vector" do
47
- it "raises an error" do
48
- expect { vector.set(4) {} }.to raise_error
49
- end
50
- end
51
- end
52
-
53
- context "and a negative index" do
54
- context "within the absolute bounds of the vector" do
55
- it "passes the current value to the block" do
56
- vector.set(-2) { |value| value.should == "B" }
57
- end
58
-
59
- it "replaces the value with the result of the block" do
60
- result = vector.set(-2) { |value| "FLIBBLE" }
61
- result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
62
- end
63
-
64
- it "supports to_proc methods" do
65
- result = vector.set(-2, &:downcase)
66
- result.should eql(Hamster.vector("A", "b", "C"))
67
- end
68
- end
69
-
70
- context "outside the absolute bounds of the vector" do
71
- it "raises an error" do
72
- expect { vector.set(-vector.size.next) {} }.to raise_error
73
- end
74
- end
75
- end
76
- end
77
-
78
- context "with a value" do
79
- context "and a positive index" do
80
- context "within the absolute bounds of the vector" do
81
- let(:set) { vector.set(1, "FLIBBLE") }
82
-
83
- it "preserves the original" do
84
- vector.should eql(Hamster.vector("A", "B", "C"))
85
- end
86
-
87
- it "sets the new value at the specified index" do
88
- set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
89
- end
90
- end
91
-
92
- context "just past the end of the vector" do
93
- it "adds a new value" do
94
- result = vector.set(3, "FLIBBLE")
95
- result.should eql(Hamster.vector("A", "B", "C", "FLIBBLE"))
96
- end
97
- end
98
-
99
- context "outside the absolute bounds of the vector" do
100
- it "raises an error" do
101
- expect { vector.set(4, "FLIBBLE") }.to raise_error
102
- end
103
- end
104
- end
105
-
106
- context "with a negative index" do
107
- let(:set) { vector.set(-2, "FLIBBLE") }
6
+ # Note: Vector#set will be deprecated; use Vector#put instead. See
7
+ # `spec/lib/hamster/vector/put_spec.rb` for the full specs of Vector#put.
108
8
 
109
- it "preserves the original" do
110
- set
111
- vector.should eql(Hamster.vector("A", "B", "C"))
112
- end
113
-
114
- it "sets the new value at the specified index" do
115
- set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
116
- end
117
- end
118
-
119
- context "outside the absolute bounds of the vector" do
120
- it "raises an error" do
121
- expect { vector.set(-vector.size.next, "FLIBBLE") }.to raise_error
122
- end
123
- end
124
- end
125
- end
9
+ describe "#set" do
10
+ let(:vector) { V[5, 6, 7] }
126
11
 
127
- context "from a subclass" do
128
- it "returns an instance of the subclass" do
129
- subclass = Class.new(Hamster::Vector)
130
- instance = subclass[1,2,3]
131
- instance.set(1, 2.5).class.should be(subclass)
12
+ context "without block" do
13
+ it "replaces the element" do
14
+ result = vector.set(1, 100)
15
+ result.should eql(V[5, 100, 7])
132
16
  end
133
17
  end
134
18
 
135
- [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
136
- context "on a #{size}-item vector" do
137
- it "works correctly" do
138
- array = (1..size).to_a
139
- vector = V.new(array)
140
-
141
- [0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
142
- value = rand(10000)
143
- array[i] = value
144
- vector = vector.set(i, value)
145
- vector[i].should be(value)
146
- end
147
-
148
- 0.upto(size-1) do |i|
149
- vector.get(i).should == array[i]
150
- end
151
- end
19
+ context "with block" do
20
+ it "passes the existing element to the block and replaces the result" do
21
+ result = vector.set(1) { |e| e + 100 }
22
+ result.should eql(V[5, 106, 7])
152
23
  end
153
24
  end
154
25
  end
@@ -12,15 +12,15 @@ describe Hamster::Vector do
12
12
  [1..33, 2..33]
13
13
  ].each do |values, expected|
14
14
  context "on #{values.inspect}" do
15
- let(:vector) { Hamster.vector(*values) }
15
+ let(:vector) { V[*values] }
16
16
 
17
17
  it "preserves the original" do
18
18
  vector.shift
19
- vector.should eql(Hamster.vector(*values))
19
+ vector.should eql(V[*values])
20
20
  end
21
21
 
22
22
  it "returns #{expected.inspect}" do
23
- vector.shift.should eql(Hamster.vector(*expected))
23
+ vector.shift.should eql(V[*expected])
24
24
  end
25
25
  end
26
26
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#shuffle" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
6
+ let(:vector) { V[1,2,3,4] }
7
7
 
8
8
  it "returns the same values, in a usually different order" do
9
9
  different = false
@@ -17,7 +17,7 @@ describe Hamster::Vector do
17
17
 
18
18
  it "leaves the original unchanged" do
19
19
  vector.shuffle
20
- vector.should eql(Hamster.vector(1,2,3,4))
20
+ vector.should eql(V[1,2,3,4])
21
21
  end
22
22
 
23
23
  context "from a subclass" do
@@ -2,8 +2,8 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(1,2,3,4) }
6
- let(:big) { Hamster::Vector.new(1..10000) }
5
+ let(:vector) { V[1,2,3,4] }
6
+ let(:big) { V.new(1..10000) }
7
7
 
8
8
  [:slice, :[]].each do |method|
9
9
  describe "##{method}" do
@@ -21,7 +21,7 @@ describe Hamster::Vector do
21
21
  end
22
22
 
23
23
  it "leaves the original unchanged" do
24
- vector.should eql(Hamster.vector(1,2,3,4))
24
+ vector.should eql(V[1,2,3,4])
25
25
  end
26
26
  end
27
27
 
@@ -41,168 +41,168 @@ describe Hamster::Vector do
41
41
 
42
42
  context "when passed a positive integral index and count" do
43
43
  it "returns 'count' elements starting from 'index'" do
44
- vector.send(method, 0, 0).should eql(Hamster.vector)
45
- vector.send(method, 0, 1).should eql(Hamster.vector(1))
46
- vector.send(method, 0, 2).should eql(Hamster.vector(1,2))
47
- vector.send(method, 0, 4).should eql(Hamster.vector(1,2,3,4))
48
- vector.send(method, 0, 6).should eql(Hamster.vector(1,2,3,4))
44
+ vector.send(method, 0, 0).should eql(V.empty)
45
+ vector.send(method, 0, 1).should eql(V[1])
46
+ vector.send(method, 0, 2).should eql(V[1,2])
47
+ vector.send(method, 0, 4).should eql(V[1,2,3,4])
48
+ vector.send(method, 0, 6).should eql(V[1,2,3,4])
49
49
  vector.send(method, 0, -1).should be_nil
50
50
  vector.send(method, 0, -2).should be_nil
51
51
  vector.send(method, 0, -4).should be_nil
52
- vector.send(method, 2, 0).should eql(Hamster.vector)
53
- vector.send(method, 2, 1).should eql(Hamster.vector(3))
54
- vector.send(method, 2, 2).should eql(Hamster.vector(3,4))
55
- vector.send(method, 2, 4).should eql(Hamster.vector(3,4))
52
+ vector.send(method, 2, 0).should eql(V.empty)
53
+ vector.send(method, 2, 1).should eql(V[3])
54
+ vector.send(method, 2, 2).should eql(V[3,4])
55
+ vector.send(method, 2, 4).should eql(V[3,4])
56
56
  vector.send(method, 2, -1).should be_nil
57
- vector.send(method, 4, 0).should eql(Hamster.vector)
58
- vector.send(method, 4, 2).should eql(Hamster.vector)
57
+ vector.send(method, 4, 0).should eql(V.empty)
58
+ vector.send(method, 4, 2).should eql(V.empty)
59
59
  vector.send(method, 4, -1).should be_nil
60
- vector.send(method, 5, 0).should be_nil
61
- vector.send(method, 5, 2).should be_nil
60
+ vector.send(method, 5, 0).should be_nil
61
+ vector.send(method, 5, 2).should be_nil
62
62
  vector.send(method, 5, -1).should be_nil
63
- vector.send(method, 6, 0).should be_nil
64
- vector.send(method, 6, 2).should be_nil
63
+ vector.send(method, 6, 0).should be_nil
64
+ vector.send(method, 6, 2).should be_nil
65
65
  vector.send(method, 6, -1).should be_nil
66
66
 
67
- big.send(method, 0, 3).should eql(Hamster.vector(1,2,3))
68
- big.send(method, 1023, 4).should eql(Hamster.vector(1024,1025,1026,1027))
69
- big.send(method, 1024, 4).should eql(Hamster.vector(1025,1026,1027,1028))
67
+ big.send(method, 0, 3).should eql(V[1,2,3])
68
+ big.send(method, 1023, 4).should eql(V[1024,1025,1026,1027])
69
+ big.send(method, 1024, 4).should eql(V[1025,1026,1027,1028])
70
70
  end
71
71
 
72
72
  it "leaves the original unchanged" do
73
- vector.should eql(Hamster.vector(1,2,3,4))
73
+ vector.should eql(V[1,2,3,4])
74
74
  end
75
75
  end
76
76
 
77
77
  context "when passed a negative integral index and count" do
78
78
  it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
79
- vector.send(method, -1, 0).should eql(Hamster.vector)
80
- vector.send(method, -1, 1).should eql(Hamster.vector(4))
81
- vector.send(method, -1, 2).should eql(Hamster.vector(4))
79
+ vector.send(method, -1, 0).should eql(V.empty)
80
+ vector.send(method, -1, 1).should eql(V[4])
81
+ vector.send(method, -1, 2).should eql(V[4])
82
82
  vector.send(method, -1, -1).should be_nil
83
- vector.send(method, -2, 0).should eql(Hamster.vector)
84
- vector.send(method, -2, 1).should eql(Hamster.vector(3))
85
- vector.send(method, -2, 2).should eql(Hamster.vector(3,4))
86
- vector.send(method, -2, 4).should eql(Hamster.vector(3,4))
83
+ vector.send(method, -2, 0).should eql(V.empty)
84
+ vector.send(method, -2, 1).should eql(V[3])
85
+ vector.send(method, -2, 2).should eql(V[3,4])
86
+ vector.send(method, -2, 4).should eql(V[3,4])
87
87
  vector.send(method, -2, -1).should be_nil
88
- vector.send(method, -4, 0).should eql(Hamster.vector)
89
- vector.send(method, -4, 1).should eql(Hamster.vector(1))
90
- vector.send(method, -4, 2).should eql(Hamster.vector(1,2))
91
- vector.send(method, -4, 4).should eql(Hamster.vector(1,2,3,4))
92
- vector.send(method, -4, 6).should eql(Hamster.vector(1,2,3,4))
88
+ vector.send(method, -4, 0).should eql(V.empty)
89
+ vector.send(method, -4, 1).should eql(V[1])
90
+ vector.send(method, -4, 2).should eql(V[1,2])
91
+ vector.send(method, -4, 4).should eql(V[1,2,3,4])
92
+ vector.send(method, -4, 6).should eql(V[1,2,3,4])
93
93
  vector.send(method, -4, -1).should be_nil
94
- vector.send(method, -5, 0).should be_nil
95
- vector.send(method, -5, 1).should be_nil
94
+ vector.send(method, -5, 0).should be_nil
95
+ vector.send(method, -5, 1).should be_nil
96
96
  vector.send(method, -5, 10).should be_nil
97
97
  vector.send(method, -5, -1).should be_nil
98
98
 
99
- big.send(method, -1, 1).should eql(Hamster.vector(10000))
100
- big.send(method, -1, 2).should eql(Hamster.vector(10000))
101
- big.send(method, -6, 2).should eql(Hamster.vector(9995,9996))
99
+ big.send(method, -1, 1).should eql(V[10000])
100
+ big.send(method, -1, 2).should eql(V[10000])
101
+ big.send(method, -6, 2).should eql(V[9995,9996])
102
102
  end
103
103
  end
104
104
 
105
105
  context "when passed a Range" do
106
106
  it "returns the elements whose indexes are within the given Range" do
107
- vector.send(method, 0..-1).should eql(Hamster.vector(1,2,3,4))
108
- vector.send(method, 0..-10).should eql(Hamster.vector)
109
- vector.send(method, 0..0).should eql(Hamster.vector(1))
110
- vector.send(method, 0..1).should eql(Hamster.vector(1,2))
111
- vector.send(method, 0..2).should eql(Hamster.vector(1,2,3))
112
- vector.send(method, 0..3).should eql(Hamster.vector(1,2,3,4))
113
- vector.send(method, 0..4).should eql(Hamster.vector(1,2,3,4))
114
- vector.send(method, 0..10).should eql(Hamster.vector(1,2,3,4))
115
- vector.send(method, 2..-10).should eql(Hamster.vector)
116
- vector.send(method, 2..0).should eql(Hamster.vector)
117
- vector.send(method, 2..2).should eql(Hamster.vector(3))
118
- vector.send(method, 2..3).should eql(Hamster.vector(3,4))
119
- vector.send(method, 2..4).should eql(Hamster.vector(3,4))
120
- vector.send(method, 3..0).should eql(Hamster.vector)
121
- vector.send(method, 3..3).should eql(Hamster.vector(4))
122
- vector.send(method, 3..4).should eql(Hamster.vector(4))
123
- vector.send(method, 4..0).should eql(Hamster.vector)
124
- vector.send(method, 4..4).should eql(Hamster.vector)
125
- vector.send(method, 4..5).should eql(Hamster.vector)
126
- vector.send(method, 5..0).should be_nil
127
- vector.send(method, 5..5).should be_nil
128
- vector.send(method, 5..6).should be_nil
129
-
130
- big.send(method, 159..162).should eql(Hamster.vector(160,161,162,163))
131
- big.send(method, 160..162).should eql(Hamster.vector(161,162,163))
132
- big.send(method, 161..162).should eql(Hamster.vector(162,163))
133
- big.send(method, 9999..10100).should eql(Hamster.vector(10000))
134
- big.send(method, 10000..10100).should eql(Hamster.vector)
107
+ vector.send(method, 0..-1).should eql(V[1,2,3,4])
108
+ vector.send(method, 0..-10).should eql(V.empty)
109
+ vector.send(method, 0..0).should eql(V[1])
110
+ vector.send(method, 0..1).should eql(V[1,2])
111
+ vector.send(method, 0..2).should eql(V[1,2,3])
112
+ vector.send(method, 0..3).should eql(V[1,2,3,4])
113
+ vector.send(method, 0..4).should eql(V[1,2,3,4])
114
+ vector.send(method, 0..10).should eql(V[1,2,3,4])
115
+ vector.send(method, 2..-10).should eql(V.empty)
116
+ vector.send(method, 2..0).should eql(V.empty)
117
+ vector.send(method, 2..2).should eql(V[3])
118
+ vector.send(method, 2..3).should eql(V[3,4])
119
+ vector.send(method, 2..4).should eql(V[3,4])
120
+ vector.send(method, 3..0).should eql(V.empty)
121
+ vector.send(method, 3..3).should eql(V[4])
122
+ vector.send(method, 3..4).should eql(V[4])
123
+ vector.send(method, 4..0).should eql(V.empty)
124
+ vector.send(method, 4..4).should eql(V.empty)
125
+ vector.send(method, 4..5).should eql(V.empty)
126
+ vector.send(method, 5..0).should be_nil
127
+ vector.send(method, 5..5).should be_nil
128
+ vector.send(method, 5..6).should be_nil
129
+
130
+ big.send(method, 159..162).should eql(V[160,161,162,163])
131
+ big.send(method, 160..162).should eql(V[161,162,163])
132
+ big.send(method, 161..162).should eql(V[162,163])
133
+ big.send(method, 9999..10100).should eql(V[10000])
134
+ big.send(method, 10000..10100).should eql(V.empty)
135
135
  big.send(method, 10001..10100).should be_nil
136
136
 
137
- vector.send(method, 0...-1).should eql(Hamster.vector(1,2,3))
138
- vector.send(method, 0...-10).should eql(Hamster.vector)
139
- vector.send(method, 0...0).should eql(Hamster.vector)
140
- vector.send(method, 0...1).should eql(Hamster.vector(1))
141
- vector.send(method, 0...2).should eql(Hamster.vector(1,2))
142
- vector.send(method, 0...3).should eql(Hamster.vector(1,2,3))
143
- vector.send(method, 0...4).should eql(Hamster.vector(1,2,3,4))
144
- vector.send(method, 0...10).should eql(Hamster.vector(1,2,3,4))
145
- vector.send(method, 2...-10).should eql(Hamster.vector)
146
- vector.send(method, 2...0).should eql(Hamster.vector)
147
- vector.send(method, 2...2).should eql(Hamster.vector)
148
- vector.send(method, 2...3).should eql(Hamster.vector(3))
149
- vector.send(method, 2...4).should eql(Hamster.vector(3,4))
150
- vector.send(method, 3...0).should eql(Hamster.vector)
151
- vector.send(method, 3...3).should eql(Hamster.vector)
152
- vector.send(method, 3...4).should eql(Hamster.vector(4))
153
- vector.send(method, 4...0).should eql(Hamster.vector)
154
- vector.send(method, 4...4).should eql(Hamster.vector)
155
- vector.send(method, 4...5).should eql(Hamster.vector)
156
- vector.send(method, 5...0).should be_nil
157
- vector.send(method, 5...5).should be_nil
158
- vector.send(method, 5...6).should be_nil
159
-
160
- big.send(method, 159...162).should eql(Hamster.vector(160,161,162))
161
- big.send(method, 160...162).should eql(Hamster.vector(161,162))
162
- big.send(method, 161...162).should eql(Hamster.vector(162))
163
- big.send(method, 9999...10100).should eql(Hamster.vector(10000))
164
- big.send(method, 10000...10100).should eql(Hamster.vector)
137
+ vector.send(method, 0...-1).should eql(V[1,2,3])
138
+ vector.send(method, 0...-10).should eql(V.empty)
139
+ vector.send(method, 0...0).should eql(V.empty)
140
+ vector.send(method, 0...1).should eql(V[1])
141
+ vector.send(method, 0...2).should eql(V[1,2])
142
+ vector.send(method, 0...3).should eql(V[1,2,3])
143
+ vector.send(method, 0...4).should eql(V[1,2,3,4])
144
+ vector.send(method, 0...10).should eql(V[1,2,3,4])
145
+ vector.send(method, 2...-10).should eql(V.empty)
146
+ vector.send(method, 2...0).should eql(V.empty)
147
+ vector.send(method, 2...2).should eql(V.empty)
148
+ vector.send(method, 2...3).should eql(V[3])
149
+ vector.send(method, 2...4).should eql(V[3,4])
150
+ vector.send(method, 3...0).should eql(V.empty)
151
+ vector.send(method, 3...3).should eql(V.empty)
152
+ vector.send(method, 3...4).should eql(V[4])
153
+ vector.send(method, 4...0).should eql(V.empty)
154
+ vector.send(method, 4...4).should eql(V.empty)
155
+ vector.send(method, 4...5).should eql(V.empty)
156
+ vector.send(method, 5...0).should be_nil
157
+ vector.send(method, 5...5).should be_nil
158
+ vector.send(method, 5...6).should be_nil
159
+
160
+ big.send(method, 159...162).should eql(V[160,161,162])
161
+ big.send(method, 160...162).should eql(V[161,162])
162
+ big.send(method, 161...162).should eql(V[162])
163
+ big.send(method, 9999...10100).should eql(V[10000])
164
+ big.send(method, 10000...10100).should eql(V.empty)
165
165
  big.send(method, 10001...10100).should be_nil
166
166
 
167
- vector.send(method, -1..-1).should eql(Hamster.vector(4))
168
- vector.send(method, -1...-1).should eql(Hamster.vector)
169
- vector.send(method, -1..3).should eql(Hamster.vector(4))
170
- vector.send(method, -1...3).should eql(Hamster.vector)
171
- vector.send(method, -1..4).should eql(Hamster.vector(4))
172
- vector.send(method, -1...4).should eql(Hamster.vector(4))
173
- vector.send(method, -1..10).should eql(Hamster.vector(4))
174
- vector.send(method, -1...10).should eql(Hamster.vector(4))
175
- vector.send(method, -1..0).should eql(Hamster.vector)
176
- vector.send(method, -1..-4).should eql(Hamster.vector)
177
- vector.send(method, -1...-4).should eql(Hamster.vector)
178
- vector.send(method, -1..-6).should eql(Hamster.vector)
179
- vector.send(method, -1...-6).should eql(Hamster.vector)
180
- vector.send(method, -2..-2).should eql(Hamster.vector(3))
181
- vector.send(method, -2...-2).should eql(Hamster.vector)
182
- vector.send(method, -2..-1).should eql(Hamster.vector(3,4))
183
- vector.send(method, -2...-1).should eql(Hamster.vector(3))
184
- vector.send(method, -2..10).should eql(Hamster.vector(3,4))
185
- vector.send(method, -2...10).should eql(Hamster.vector(3,4))
186
-
187
- big.send(method, -1..-1).should eql(Hamster.vector(10000))
188
- big.send(method, -1..9999).should eql(Hamster.vector(10000))
189
- big.send(method, -1...9999).should eql(Hamster.vector)
190
- big.send(method, -2...9999).should eql(Hamster.vector(9999))
191
- big.send(method, -2..-1).should eql(Hamster.vector(9999,10000))
192
-
193
- vector.send(method, -4..-4).should eql(Hamster.vector(1))
194
- vector.send(method, -4..-2).should eql(Hamster.vector(1,2,3))
195
- vector.send(method, -4...-2).should eql(Hamster.vector(1,2))
196
- vector.send(method, -4..-1).should eql(Hamster.vector(1,2,3,4))
197
- vector.send(method, -4...-1).should eql(Hamster.vector(1,2,3))
198
- vector.send(method, -4..3).should eql(Hamster.vector(1,2,3,4))
199
- vector.send(method, -4...3).should eql(Hamster.vector(1,2,3))
200
- vector.send(method, -4..4).should eql(Hamster.vector(1,2,3,4))
201
- vector.send(method, -4...4).should eql(Hamster.vector(1,2,3,4))
202
- vector.send(method, -4..0).should eql(Hamster.vector(1))
203
- vector.send(method, -4...0).should eql(Hamster.vector)
204
- vector.send(method, -4..1).should eql(Hamster.vector(1,2))
205
- vector.send(method, -4...1).should eql(Hamster.vector(1))
167
+ vector.send(method, -1..-1).should eql(V[4])
168
+ vector.send(method, -1...-1).should eql(V.empty)
169
+ vector.send(method, -1..3).should eql(V[4])
170
+ vector.send(method, -1...3).should eql(V.empty)
171
+ vector.send(method, -1..4).should eql(V[4])
172
+ vector.send(method, -1...4).should eql(V[4])
173
+ vector.send(method, -1..10).should eql(V[4])
174
+ vector.send(method, -1...10).should eql(V[4])
175
+ vector.send(method, -1..0).should eql(V.empty)
176
+ vector.send(method, -1..-4).should eql(V.empty)
177
+ vector.send(method, -1...-4).should eql(V.empty)
178
+ vector.send(method, -1..-6).should eql(V.empty)
179
+ vector.send(method, -1...-6).should eql(V.empty)
180
+ vector.send(method, -2..-2).should eql(V[3])
181
+ vector.send(method, -2...-2).should eql(V.empty)
182
+ vector.send(method, -2..-1).should eql(V[3,4])
183
+ vector.send(method, -2...-1).should eql(V[3])
184
+ vector.send(method, -2..10).should eql(V[3,4])
185
+ vector.send(method, -2...10).should eql(V[3,4])
186
+
187
+ big.send(method, -1..-1).should eql(V[10000])
188
+ big.send(method, -1..9999).should eql(V[10000])
189
+ big.send(method, -1...9999).should eql(V.empty)
190
+ big.send(method, -2...9999).should eql(V[9999])
191
+ big.send(method, -2..-1).should eql(V[9999,10000])
192
+
193
+ vector.send(method, -4..-4).should eql(V[1])
194
+ vector.send(method, -4..-2).should eql(V[1,2,3])
195
+ vector.send(method, -4...-2).should eql(V[1,2])
196
+ vector.send(method, -4..-1).should eql(V[1,2,3,4])
197
+ vector.send(method, -4...-1).should eql(V[1,2,3])
198
+ vector.send(method, -4..3).should eql(V[1,2,3,4])
199
+ vector.send(method, -4...3).should eql(V[1,2,3])
200
+ vector.send(method, -4..4).should eql(V[1,2,3,4])
201
+ vector.send(method, -4...4).should eql(V[1,2,3,4])
202
+ vector.send(method, -4..0).should eql(V[1])
203
+ vector.send(method, -4...0).should eql(V.empty)
204
+ vector.send(method, -4..1).should eql(V[1,2])
205
+ vector.send(method, -4...1).should eql(V[1])
206
206
 
207
207
  vector.send(method, -5..-5).should be_nil
208
208
  vector.send(method, -5...-5).should be_nil
@@ -214,7 +214,7 @@ describe Hamster::Vector do
214
214
  end
215
215
 
216
216
  it "leaves the original unchanged" do
217
- vector.should eql(Hamster.vector(1,2,3,4))
217
+ vector.should eql(V[1,2,3,4])
218
218
  end
219
219
  end
220
220
  end
@@ -222,8 +222,8 @@ describe Hamster::Vector do
222
222
  context "when passed a subclass of Range" do
223
223
  it "works the same as with a Range" do
224
224
  subclass = Class.new(Range)
225
- vector.send(method, subclass.new(1,2)).should eql(Hamster.vector(2,3))
226
- vector.send(method, subclass.new(-3,-1,true)).should eql(Hamster.vector(2,3))
225
+ vector.send(method, subclass.new(1,2)).should eql(V[2,3])
226
+ vector.send(method, subclass.new(-3,-1,true)).should eql(V[2,3])
227
227
  end
228
228
  end
229
229