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
@@ -10,7 +10,7 @@ describe Hamster::SortedSet do
10
10
  [%w[A B C], 3],
11
11
  ].each do |values, result|
12
12
  it "returns #{result} for #{values.inspect}" do
13
- Hamster.sorted_set(*values).send(method).should == result
13
+ SS[*values].send(method).should == result
14
14
  end
15
15
  end
16
16
  end
@@ -2,8 +2,8 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- let(:sorted_set) { Hamster.sorted_set(1,2,3,4) }
6
- let(:big) { Hamster::SortedSet.new(1..10000) }
5
+ let(:sorted_set) { SS[1,2,3,4] }
6
+ let(:big) { SS.new(1..10000) }
7
7
 
8
8
  [:slice, :[]].each do |method|
9
9
  describe "##{method}" do
@@ -21,7 +21,7 @@ describe Hamster::SortedSet do
21
21
  end
22
22
 
23
23
  it "leaves the original unchanged" do
24
- sorted_set.should eql(Hamster.sorted_set(1,2,3,4))
24
+ sorted_set.should eql(SS[1,2,3,4])
25
25
  end
26
26
  end
27
27
 
@@ -41,189 +41,205 @@ describe Hamster::SortedSet 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
- sorted_set.send(method, 0, 0).should eql(Hamster.sorted_set)
45
- sorted_set.send(method, 0, 1).should eql(Hamster.sorted_set(1))
46
- sorted_set.send(method, 0, 2).should eql(Hamster.sorted_set(1,2))
47
- sorted_set.send(method, 0, 4).should eql(Hamster.sorted_set(1,2,3,4))
48
- sorted_set.send(method, 0, 6).should eql(Hamster.sorted_set(1,2,3,4))
44
+ sorted_set.send(method, 0, 0).should eql(SS.empty)
45
+ sorted_set.send(method, 0, 1).should eql(SS[1])
46
+ sorted_set.send(method, 0, 2).should eql(SS[1,2])
47
+ sorted_set.send(method, 0, 4).should eql(SS[1,2,3,4])
48
+ sorted_set.send(method, 0, 6).should eql(SS[1,2,3,4])
49
49
  sorted_set.send(method, 0, -1).should be_nil
50
50
  sorted_set.send(method, 0, -2).should be_nil
51
51
  sorted_set.send(method, 0, -4).should be_nil
52
- sorted_set.send(method, 2, 0).should eql(Hamster.sorted_set)
53
- sorted_set.send(method, 2, 1).should eql(Hamster.sorted_set(3))
54
- sorted_set.send(method, 2, 2).should eql(Hamster.sorted_set(3,4))
55
- sorted_set.send(method, 2, 4).should eql(Hamster.sorted_set(3,4))
52
+ sorted_set.send(method, 2, 0).should eql(SS.empty)
53
+ sorted_set.send(method, 2, 1).should eql(SS[3])
54
+ sorted_set.send(method, 2, 2).should eql(SS[3,4])
55
+ sorted_set.send(method, 2, 4).should eql(SS[3,4])
56
56
  sorted_set.send(method, 2, -1).should be_nil
57
- sorted_set.send(method, 4, 0).should eql(Hamster.sorted_set)
58
- sorted_set.send(method, 4, 2).should eql(Hamster.sorted_set)
57
+ sorted_set.send(method, 4, 0).should eql(SS.empty)
58
+ sorted_set.send(method, 4, 2).should eql(SS.empty)
59
59
  sorted_set.send(method, 4, -1).should be_nil
60
- sorted_set.send(method, 5, 0).should be_nil
61
- sorted_set.send(method, 5, 2).should be_nil
60
+ sorted_set.send(method, 5, 0).should be_nil
61
+ sorted_set.send(method, 5, 2).should be_nil
62
62
  sorted_set.send(method, 5, -1).should be_nil
63
- sorted_set.send(method, 6, 0).should be_nil
64
- sorted_set.send(method, 6, 2).should be_nil
63
+ sorted_set.send(method, 6, 0).should be_nil
64
+ sorted_set.send(method, 6, 2).should be_nil
65
65
  sorted_set.send(method, 6, -1).should be_nil
66
66
 
67
- big.send(method, 0, 3).should eql(Hamster.sorted_set(1,2,3))
68
- big.send(method, 1023, 4).should eql(Hamster.sorted_set(1024,1025,1026,1027))
69
- big.send(method, 1024, 4).should eql(Hamster.sorted_set(1025,1026,1027,1028))
67
+ big.send(method, 0, 3).should eql(SS[1,2,3])
68
+ big.send(method, 1023, 4).should eql(SS[1024,1025,1026,1027])
69
+ big.send(method, 1024, 4).should eql(SS[1025,1026,1027,1028])
70
70
  end
71
71
 
72
72
  it "leaves the original unchanged" do
73
- sorted_set.should eql(Hamster.sorted_set(1,2,3,4))
73
+ sorted_set.should eql(SS[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
- sorted_set.send(method, -1, 0).should eql(Hamster.sorted_set)
80
- sorted_set.send(method, -1, 1).should eql(Hamster.sorted_set(4))
81
- sorted_set.send(method, -1, 2).should eql(Hamster.sorted_set(4))
79
+ sorted_set.send(method, -1, 0).should eql(SS.empty)
80
+ sorted_set.send(method, -1, 1).should eql(SS[4])
81
+ sorted_set.send(method, -1, 2).should eql(SS[4])
82
82
  sorted_set.send(method, -1, -1).should be_nil
83
- sorted_set.send(method, -2, 0).should eql(Hamster.sorted_set)
84
- sorted_set.send(method, -2, 1).should eql(Hamster.sorted_set(3))
85
- sorted_set.send(method, -2, 2).should eql(Hamster.sorted_set(3,4))
86
- sorted_set.send(method, -2, 4).should eql(Hamster.sorted_set(3,4))
83
+ sorted_set.send(method, -2, 0).should eql(SS.empty)
84
+ sorted_set.send(method, -2, 1).should eql(SS[3])
85
+ sorted_set.send(method, -2, 2).should eql(SS[3,4])
86
+ sorted_set.send(method, -2, 4).should eql(SS[3,4])
87
87
  sorted_set.send(method, -2, -1).should be_nil
88
- sorted_set.send(method, -4, 0).should eql(Hamster.sorted_set)
89
- sorted_set.send(method, -4, 1).should eql(Hamster.sorted_set(1))
90
- sorted_set.send(method, -4, 2).should eql(Hamster.sorted_set(1,2))
91
- sorted_set.send(method, -4, 4).should eql(Hamster.sorted_set(1,2,3,4))
92
- sorted_set.send(method, -4, 6).should eql(Hamster.sorted_set(1,2,3,4))
88
+ sorted_set.send(method, -4, 0).should eql(SS.empty)
89
+ sorted_set.send(method, -4, 1).should eql(SS[1])
90
+ sorted_set.send(method, -4, 2).should eql(SS[1,2])
91
+ sorted_set.send(method, -4, 4).should eql(SS[1,2,3,4])
92
+ sorted_set.send(method, -4, 6).should eql(SS[1,2,3,4])
93
93
  sorted_set.send(method, -4, -1).should be_nil
94
- sorted_set.send(method, -5, 0).should be_nil
95
- sorted_set.send(method, -5, 1).should be_nil
94
+ sorted_set.send(method, -5, 0).should be_nil
95
+ sorted_set.send(method, -5, 1).should be_nil
96
96
  sorted_set.send(method, -5, 10).should be_nil
97
97
  sorted_set.send(method, -5, -1).should be_nil
98
98
 
99
- big.send(method, -1, 1).should eql(Hamster.sorted_set(10000))
100
- big.send(method, -1, 2).should eql(Hamster.sorted_set(10000))
101
- big.send(method, -6, 2).should eql(Hamster.sorted_set(9995,9996))
99
+ big.send(method, -1, 1).should eql(SS[10000])
100
+ big.send(method, -1, 2).should eql(SS[10000])
101
+ big.send(method, -6, 2).should eql(SS[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
- sorted_set.send(method, 0..-1).should eql(Hamster.sorted_set(1,2,3,4))
108
- sorted_set.send(method, 0..-10).should eql(Hamster.sorted_set)
109
- sorted_set.send(method, 0..0).should eql(Hamster.sorted_set(1))
110
- sorted_set.send(method, 0..1).should eql(Hamster.sorted_set(1,2))
111
- sorted_set.send(method, 0..2).should eql(Hamster.sorted_set(1,2,3))
112
- sorted_set.send(method, 0..3).should eql(Hamster.sorted_set(1,2,3,4))
113
- sorted_set.send(method, 0..4).should eql(Hamster.sorted_set(1,2,3,4))
114
- sorted_set.send(method, 0..10).should eql(Hamster.sorted_set(1,2,3,4))
115
- sorted_set.send(method, 2..-10).should eql(Hamster.sorted_set)
116
- sorted_set.send(method, 2..0).should eql(Hamster.sorted_set)
117
- sorted_set.send(method, 2..2).should eql(Hamster.sorted_set(3))
118
- sorted_set.send(method, 2..3).should eql(Hamster.sorted_set(3,4))
119
- sorted_set.send(method, 2..4).should eql(Hamster.sorted_set(3,4))
120
- sorted_set.send(method, 3..0).should eql(Hamster.sorted_set)
121
- sorted_set.send(method, 3..3).should eql(Hamster.sorted_set(4))
122
- sorted_set.send(method, 3..4).should eql(Hamster.sorted_set(4))
123
- sorted_set.send(method, 4..0).should eql(Hamster.sorted_set)
124
- sorted_set.send(method, 4..4).should eql(Hamster.sorted_set)
125
- sorted_set.send(method, 4..5).should eql(Hamster.sorted_set)
126
- sorted_set.send(method, 5..0).should be_nil
127
- sorted_set.send(method, 5..5).should be_nil
128
- sorted_set.send(method, 5..6).should be_nil
129
-
130
- big.send(method, 159..162).should eql(Hamster.sorted_set(160,161,162,163))
131
- big.send(method, 160..162).should eql(Hamster.sorted_set(161,162,163))
132
- big.send(method, 161..162).should eql(Hamster.sorted_set(162,163))
133
- big.send(method, 9999..10100).should eql(Hamster.sorted_set(10000))
134
- big.send(method, 10000..10100).should eql(Hamster.sorted_set)
107
+ sorted_set.send(method, 0..-1).should eql(SS[1,2,3,4])
108
+ sorted_set.send(method, 0..-10).should eql(SS.empty)
109
+ sorted_set.send(method, 0..0).should eql(SS[1])
110
+ sorted_set.send(method, 0..1).should eql(SS[1,2])
111
+ sorted_set.send(method, 0..2).should eql(SS[1,2,3])
112
+ sorted_set.send(method, 0..3).should eql(SS[1,2,3,4])
113
+ sorted_set.send(method, 0..4).should eql(SS[1,2,3,4])
114
+ sorted_set.send(method, 0..10).should eql(SS[1,2,3,4])
115
+ sorted_set.send(method, 2..-10).should eql(SS.empty)
116
+ sorted_set.send(method, 2..0).should eql(SS.empty)
117
+ sorted_set.send(method, 2..2).should eql(SS[3])
118
+ sorted_set.send(method, 2..3).should eql(SS[3,4])
119
+ sorted_set.send(method, 2..4).should eql(SS[3,4])
120
+ sorted_set.send(method, 3..0).should eql(SS.empty)
121
+ sorted_set.send(method, 3..3).should eql(SS[4])
122
+ sorted_set.send(method, 3..4).should eql(SS[4])
123
+ sorted_set.send(method, 4..0).should eql(SS.empty)
124
+ sorted_set.send(method, 4..4).should eql(SS.empty)
125
+ sorted_set.send(method, 4..5).should eql(SS.empty)
126
+ sorted_set.send(method, 5..0).should be_nil
127
+ sorted_set.send(method, 5..5).should be_nil
128
+ sorted_set.send(method, 5..6).should be_nil
129
+
130
+ big.send(method, 159..162).should eql(SS[160,161,162,163])
131
+ big.send(method, 160..162).should eql(SS[161,162,163])
132
+ big.send(method, 161..162).should eql(SS[162,163])
133
+ big.send(method, 9999..10100).should eql(SS[10000])
134
+ big.send(method, 10000..10100).should eql(SS.empty)
135
135
  big.send(method, 10001..10100).should be_nil
136
136
 
137
- sorted_set.send(method, 0...-1).should eql(Hamster.sorted_set(1,2,3))
138
- sorted_set.send(method, 0...-10).should eql(Hamster.sorted_set)
139
- sorted_set.send(method, 0...0).should eql(Hamster.sorted_set)
140
- sorted_set.send(method, 0...1).should eql(Hamster.sorted_set(1))
141
- sorted_set.send(method, 0...2).should eql(Hamster.sorted_set(1,2))
142
- sorted_set.send(method, 0...3).should eql(Hamster.sorted_set(1,2,3))
143
- sorted_set.send(method, 0...4).should eql(Hamster.sorted_set(1,2,3,4))
144
- sorted_set.send(method, 0...10).should eql(Hamster.sorted_set(1,2,3,4))
145
- sorted_set.send(method, 2...-10).should eql(Hamster.sorted_set)
146
- sorted_set.send(method, 2...0).should eql(Hamster.sorted_set)
147
- sorted_set.send(method, 2...2).should eql(Hamster.sorted_set)
148
- sorted_set.send(method, 2...3).should eql(Hamster.sorted_set(3))
149
- sorted_set.send(method, 2...4).should eql(Hamster.sorted_set(3,4))
150
- sorted_set.send(method, 3...0).should eql(Hamster.sorted_set)
151
- sorted_set.send(method, 3...3).should eql(Hamster.sorted_set)
152
- sorted_set.send(method, 3...4).should eql(Hamster.sorted_set(4))
153
- sorted_set.send(method, 4...0).should eql(Hamster.sorted_set)
154
- sorted_set.send(method, 4...4).should eql(Hamster.sorted_set)
155
- sorted_set.send(method, 4...5).should eql(Hamster.sorted_set)
156
- sorted_set.send(method, 5...0).should be_nil
157
- sorted_set.send(method, 5...5).should be_nil
158
- sorted_set.send(method, 5...6).should be_nil
159
-
160
- big.send(method, 159...162).should eql(Hamster.sorted_set(160,161,162))
161
- big.send(method, 160...162).should eql(Hamster.sorted_set(161,162))
162
- big.send(method, 161...162).should eql(Hamster.sorted_set(162))
163
- big.send(method, 9999...10100).should eql(Hamster.sorted_set(10000))
164
- big.send(method, 10000...10100).should eql(Hamster.sorted_set)
137
+ sorted_set.send(method, 0...-1).should eql(SS[1,2,3])
138
+ sorted_set.send(method, 0...-10).should eql(SS.empty)
139
+ sorted_set.send(method, 0...0).should eql(SS.empty)
140
+ sorted_set.send(method, 0...1).should eql(SS[1])
141
+ sorted_set.send(method, 0...2).should eql(SS[1,2])
142
+ sorted_set.send(method, 0...3).should eql(SS[1,2,3])
143
+ sorted_set.send(method, 0...4).should eql(SS[1,2,3,4])
144
+ sorted_set.send(method, 0...10).should eql(SS[1,2,3,4])
145
+ sorted_set.send(method, 2...-10).should eql(SS.empty)
146
+ sorted_set.send(method, 2...0).should eql(SS.empty)
147
+ sorted_set.send(method, 2...2).should eql(SS.empty)
148
+ sorted_set.send(method, 2...3).should eql(SS[3])
149
+ sorted_set.send(method, 2...4).should eql(SS[3,4])
150
+ sorted_set.send(method, 3...0).should eql(SS.empty)
151
+ sorted_set.send(method, 3...3).should eql(SS.empty)
152
+ sorted_set.send(method, 3...4).should eql(SS[4])
153
+ sorted_set.send(method, 4...0).should eql(SS.empty)
154
+ sorted_set.send(method, 4...4).should eql(SS.empty)
155
+ sorted_set.send(method, 4...5).should eql(SS.empty)
156
+ sorted_set.send(method, 5...0).should be_nil
157
+ sorted_set.send(method, 5...5).should be_nil
158
+ sorted_set.send(method, 5...6).should be_nil
159
+
160
+ big.send(method, 159...162).should eql(SS[160,161,162])
161
+ big.send(method, 160...162).should eql(SS[161,162])
162
+ big.send(method, 161...162).should eql(SS[162])
163
+ big.send(method, 9999...10100).should eql(SS[10000])
164
+ big.send(method, 10000...10100).should eql(SS.empty)
165
165
  big.send(method, 10001...10100).should be_nil
166
166
 
167
- sorted_set.send(method, -1..-1).should eql(Hamster.sorted_set(4))
168
- sorted_set.send(method, -1...-1).should eql(Hamster.sorted_set)
169
- sorted_set.send(method, -1..3).should eql(Hamster.sorted_set(4))
170
- sorted_set.send(method, -1...3).should eql(Hamster.sorted_set)
171
- sorted_set.send(method, -1..4).should eql(Hamster.sorted_set(4))
172
- sorted_set.send(method, -1...4).should eql(Hamster.sorted_set(4))
173
- sorted_set.send(method, -1..10).should eql(Hamster.sorted_set(4))
174
- sorted_set.send(method, -1...10).should eql(Hamster.sorted_set(4))
175
- sorted_set.send(method, -1..0).should eql(Hamster.sorted_set)
176
- sorted_set.send(method, -1..-4).should eql(Hamster.sorted_set)
177
- sorted_set.send(method, -1...-4).should eql(Hamster.sorted_set)
178
- sorted_set.send(method, -1..-6).should eql(Hamster.sorted_set)
179
- sorted_set.send(method, -1...-6).should eql(Hamster.sorted_set)
180
- sorted_set.send(method, -2..-2).should eql(Hamster.sorted_set(3))
181
- sorted_set.send(method, -2...-2).should eql(Hamster.sorted_set)
182
- sorted_set.send(method, -2..-1).should eql(Hamster.sorted_set(3,4))
183
- sorted_set.send(method, -2...-1).should eql(Hamster.sorted_set(3))
184
- sorted_set.send(method, -2..10).should eql(Hamster.sorted_set(3,4))
185
- sorted_set.send(method, -2...10).should eql(Hamster.sorted_set(3,4))
186
-
187
- big.send(method, -1..-1).should eql(Hamster.sorted_set(10000))
188
- big.send(method, -1..9999).should eql(Hamster.sorted_set(10000))
189
- big.send(method, -1...9999).should eql(Hamster.sorted_set)
190
- big.send(method, -2...9999).should eql(Hamster.sorted_set(9999))
191
- big.send(method, -2..-1).should eql(Hamster.sorted_set(9999,10000))
192
-
193
- sorted_set.send(method, -4..-4).should eql(Hamster.sorted_set(1))
194
- sorted_set.send(method, -4..-2).should eql(Hamster.sorted_set(1,2,3))
195
- sorted_set.send(method, -4...-2).should eql(Hamster.sorted_set(1,2))
196
- sorted_set.send(method, -4..-1).should eql(Hamster.sorted_set(1,2,3,4))
197
- sorted_set.send(method, -4...-1).should eql(Hamster.sorted_set(1,2,3))
198
- sorted_set.send(method, -4..3).should eql(Hamster.sorted_set(1,2,3,4))
199
- sorted_set.send(method, -4...3).should eql(Hamster.sorted_set(1,2,3))
200
- sorted_set.send(method, -4..4).should eql(Hamster.sorted_set(1,2,3,4))
201
- sorted_set.send(method, -4...4).should eql(Hamster.sorted_set(1,2,3,4))
202
- sorted_set.send(method, -4..0).should eql(Hamster.sorted_set(1))
203
- sorted_set.send(method, -4...0).should eql(Hamster.sorted_set)
204
- sorted_set.send(method, -4..1).should eql(Hamster.sorted_set(1,2))
205
- sorted_set.send(method, -4...1).should eql(Hamster.sorted_set(1))
206
-
207
- sorted_set.send(method, -5..-5).should be_nil
167
+ sorted_set.send(method, -1..-1).should eql(SS[4])
168
+ sorted_set.send(method, -1...-1).should eql(SS.empty)
169
+ sorted_set.send(method, -1..3).should eql(SS[4])
170
+ sorted_set.send(method, -1...3).should eql(SS.empty)
171
+ sorted_set.send(method, -1..4).should eql(SS[4])
172
+ sorted_set.send(method, -1...4).should eql(SS[4])
173
+ sorted_set.send(method, -1..10).should eql(SS[4])
174
+ sorted_set.send(method, -1...10).should eql(SS[4])
175
+ sorted_set.send(method, -1..0).should eql(SS.empty)
176
+ sorted_set.send(method, -1..-4).should eql(SS.empty)
177
+ sorted_set.send(method, -1...-4).should eql(SS.empty)
178
+ sorted_set.send(method, -1..-6).should eql(SS.empty)
179
+ sorted_set.send(method, -1...-6).should eql(SS.empty)
180
+ sorted_set.send(method, -2..-2).should eql(SS[3])
181
+ sorted_set.send(method, -2...-2).should eql(SS.empty)
182
+ sorted_set.send(method, -2..-1).should eql(SS[3,4])
183
+ sorted_set.send(method, -2...-1).should eql(SS[3])
184
+ sorted_set.send(method, -2..10).should eql(SS[3,4])
185
+ sorted_set.send(method, -2...10).should eql(SS[3,4])
186
+
187
+ big.send(method, -1..-1).should eql(SS[10000])
188
+ big.send(method, -1..9999).should eql(SS[10000])
189
+ big.send(method, -1...9999).should eql(SS.empty)
190
+ big.send(method, -2...9999).should eql(SS[9999])
191
+ big.send(method, -2..-1).should eql(SS[9999,10000])
192
+
193
+ sorted_set.send(method, -4..-4).should eql(SS[1])
194
+ sorted_set.send(method, -4..-2).should eql(SS[1,2,3])
195
+ sorted_set.send(method, -4...-2).should eql(SS[1,2])
196
+ sorted_set.send(method, -4..-1).should eql(SS[1,2,3,4])
197
+ sorted_set.send(method, -4...-1).should eql(SS[1,2,3])
198
+ sorted_set.send(method, -4..3).should eql(SS[1,2,3,4])
199
+ sorted_set.send(method, -4...3).should eql(SS[1,2,3])
200
+ sorted_set.send(method, -4..4).should eql(SS[1,2,3,4])
201
+ sorted_set.send(method, -4...4).should eql(SS[1,2,3,4])
202
+ sorted_set.send(method, -4..0).should eql(SS[1])
203
+ sorted_set.send(method, -4...0).should eql(SS.empty)
204
+ sorted_set.send(method, -4..1).should eql(SS[1,2])
205
+ sorted_set.send(method, -4...1).should eql(SS[1])
206
+
207
+ sorted_set.send(method, -5..-5).should be_nil
208
208
  sorted_set.send(method, -5...-5).should be_nil
209
- sorted_set.send(method, -5..-4).should be_nil
210
- sorted_set.send(method, -5..-1).should be_nil
211
- sorted_set.send(method, -5..10).should be_nil
209
+ sorted_set.send(method, -5..-4).should be_nil
210
+ sorted_set.send(method, -5..-1).should be_nil
211
+ sorted_set.send(method, -5..10).should be_nil
212
212
 
213
213
  big.send(method, -10001..-1).should be_nil
214
214
  end
215
215
 
216
216
  it "leaves the original unchanged" do
217
- sorted_set.should eql(Hamster.sorted_set(1,2,3,4))
217
+ sorted_set.should eql(SS[1,2,3,4])
218
218
  end
219
219
  end
220
220
  end
221
221
 
222
+ context "when passed an empty Range" do
223
+ it "does not lose custom sort order" do
224
+ ss = SS.new(["yogurt", "cake", "pistachios"]) { |word| word.length }
225
+ ss = ss.send(method, 1...1).add("tea").add("fruitcake").add("toast")
226
+ ss.to_a.should == ["tea", "toast", "fruitcake"]
227
+ end
228
+ end
229
+
230
+ context "when passed a length of zero" do
231
+ it "does not lose custom sort order" do
232
+ ss = SS.new(["yogurt", "cake", "pistachios"]) { |word| word.length }
233
+ ss = ss.send(method, 0, 0).add("tea").add("fruitcake").add("toast")
234
+ ss.to_a.should == ["tea", "toast", "fruitcake"]
235
+ end
236
+ end
237
+
222
238
  context "when passed a subclass of Range" do
223
239
  it "works the same as with a Range" do
224
240
  subclass = Class.new(Range)
225
- sorted_set.send(method, subclass.new(1,2)).should eql(Hamster.sorted_set(2,3))
226
- sorted_set.send(method, subclass.new(-3,-1,true)).should eql(Hamster.sorted_set(2,3))
241
+ sorted_set.send(method, subclass.new(1,2)).should eql(SS[2,3])
242
+ sorted_set.send(method, subclass.new(-3,-1,true)).should eql(SS[2,3])
227
243
  end
228
244
  end
229
245
 
@@ -13,12 +13,12 @@ describe Hamster::SortedSet do
13
13
  [%w[Ichi Ni San], %w[Ni San Ichi]],
14
14
  ].each do |values, expected|
15
15
  describe "on #{values.inspect}" do
16
- let(:sorted_set) { Hamster.sorted_set(*values) { |item| item.reverse }}
16
+ let(:sorted_set) { SS.new(values) { |item| item.reverse }}
17
17
 
18
18
  context "with a block" do
19
19
  it "preserves the original" do
20
20
  sorted_set.send(method, &comparator)
21
- sorted_set.to_a.should == Hamster.sorted_set(*values) { |item| item.reverse }
21
+ sorted_set.to_a.should == SS.new(values) { |item| item.reverse }
22
22
  end
23
23
 
24
24
  it "returns #{expected.inspect}" do
@@ -30,7 +30,7 @@ describe Hamster::SortedSet do
30
30
  context "without a block" do
31
31
  it "preserves the original" do
32
32
  sorted_set.send(method)
33
- sorted_set.to_a.should == Hamster.sorted_set(*values) { |item| item.reverse }
33
+ sorted_set.to_a.should == SS.new(values) { |item| item.reverse }
34
34
  end
35
35
 
36
36
  it "returns #{expected.sort.inspect}" do
@@ -18,7 +18,7 @@ describe Hamster::SortedSet do
18
18
  ].each do |a, b, expected|
19
19
  context "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.sorted_set(*a).subset?(Hamster.sorted_set(*b)).should == expected
21
+ SS[*a].subset?(SS[*b]).should == expected
22
22
  end
23
23
  end
24
24
  end
@@ -40,7 +40,7 @@ describe Hamster::SortedSet do
40
40
  ].each do |a, b, expected|
41
41
  context "for #{a.inspect} and #{b.inspect}" do
42
42
  it "returns #{expected}" do
43
- Hamster.sorted_set(*a).proper_subset?(Hamster.sorted_set(*b)).should == expected
43
+ SS[*a].proper_subset?(SS[*b]).should == expected
44
44
  end
45
45
  end
46
46
  end
@@ -18,7 +18,7 @@ describe Hamster::SortedSet do
18
18
  ].each do |a, b, expected|
19
19
  context "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.sorted_set(*a).superset?(Hamster.sorted_set(*b)).should == expected
21
+ SS[*a].superset?(SS[*b]).should == expected
22
22
  end
23
23
  end
24
24
  end
@@ -40,7 +40,7 @@ describe Hamster::SortedSet do
40
40
  ].each do |a, b, expected|
41
41
  context "for #{a.inspect} and #{b.inspect}" do
42
42
  it "returns #{expected}" do
43
- Hamster.sorted_set(*a).proper_superset?(Hamster.sorted_set(*b)).should == expected
43
+ SS[*a].proper_superset?(SS[*b]).should == expected
44
44
  end
45
45
  end
46
46
  end
@@ -10,17 +10,46 @@ describe Hamster::SortedSet do
10
10
  [%w[A B C], 2, %w[A B]],
11
11
  ].each do |values, number, expected|
12
12
  context "#{number} from #{values.inspect}" do
13
- let(:sorted_set) { Hamster.sorted_set(*values) }
13
+ let(:sorted_set) { SS[*values] }
14
14
 
15
15
  it "preserves the original" do
16
16
  sorted_set.take(number)
17
- sorted_set.should eql(Hamster.sorted_set(*values))
17
+ sorted_set.should eql(SS[*values])
18
18
  end
19
19
 
20
20
  it "returns #{expected.inspect}" do
21
- sorted_set.take(number).should eql(Hamster.sorted_set(*expected))
21
+ sorted_set.take(number).should eql(SS[*expected])
22
22
  end
23
23
  end
24
24
  end
25
+
26
+ context "when argument is at least size of receiver" do
27
+ let(:sorted_set) { SS[6, 7, 8, 9] }
28
+ it "returns self" do
29
+ sorted_set.take(sorted_set.size).should be(sorted_set)
30
+ sorted_set.take(sorted_set.size + 1).should be(sorted_set)
31
+ end
32
+ end
33
+
34
+ context "when the set has a custom order" do
35
+ let(:sorted_set) { SS.new([1, 2, 3]) { |x| -x }}
36
+ it "maintains the custom order" do
37
+ sorted_set.take(1).to_a.should == [3]
38
+ sorted_set.take(2).to_a.should == [3, 2]
39
+ sorted_set.take(3).to_a.should == [3, 2, 1]
40
+ end
41
+
42
+ it "keeps the comparator even when set is cleared" do
43
+ s = sorted_set.take(0)
44
+ s.add(4).add(5).add(6).to_a.should == [6, 5, 4]
45
+ end
46
+ end
47
+
48
+ context "when called on a subclass" do
49
+ it "should return an instance of the subclass" do
50
+ subclass = Class.new(Hamster::SortedSet)
51
+ subclass.new([1,2,3]).take(1).class.should be(subclass)
52
+ end
53
+ end
25
54
  end
26
55
  end