hamster 1.0.1.pre.rc3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -9,23 +9,23 @@ describe Hamster::SortedSet do
9
9
  [%w[A B C], %w[A B]],
10
10
  ].each do |values, expected|
11
11
  context "on #{values.inspect}" do
12
- let(:sorted_set) { Hamster.sorted_set(*values) }
12
+ let(:sorted_set) { SS[*values] }
13
13
 
14
14
  context "with a block" do
15
15
  it "returns #{expected.inspect}" do
16
- sorted_set.take_while { |item| item < "C" }.should eql(Hamster.sorted_set(*expected))
16
+ sorted_set.take_while { |item| item < "C" }.should eql(SS[*expected])
17
17
  end
18
18
 
19
19
  it "preserves the original" do
20
20
  sorted_set.take_while { |item| item < "C" }
21
- sorted_set.should eql(Hamster.sorted_set(*values))
21
+ sorted_set.should eql(SS[*values])
22
22
  end
23
23
  end
24
24
 
25
25
  context "without a block" do
26
26
  it "returns an Enumerator" do
27
27
  sorted_set.take_while.class.should be(Enumerator)
28
- sorted_set.take_while.each { |item| item < "C" }.should eql(Hamster.sorted_set(*expected))
28
+ sorted_set.take_while.each { |item| item < "C" }.should eql(SS[*expected])
29
29
  end
30
30
  end
31
31
  end
@@ -11,7 +11,7 @@ describe Hamster::SortedSet do
11
11
  ].each do |values|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns a set with the same values" do
14
- Hamster.sorted_set(*values).to_set.should eql(Hamster.set(*values))
14
+ SS[*values].to_set.should eql(S[*values])
15
15
  end
16
16
  end
17
17
  end
@@ -13,13 +13,13 @@ describe Hamster::SortedSet do
13
13
  ].each do |a, b, expected|
14
14
  context "for #{a.inspect} and #{b.inspect}" do
15
15
  it "returns #{expected.inspect}" do
16
- Hamster.sorted_set(*a).send(method, Hamster.sorted_set(*b)).should eql(Hamster.sorted_set(*expected))
16
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
17
17
  end
18
18
  end
19
19
 
20
20
  context "for #{b.inspect} and #{a.inspect}" do
21
21
  it "returns #{expected.inspect}" do
22
- Hamster.sorted_set(*b).send(method, Hamster.sorted_set(*a)).should eql(Hamster.sorted_set(*expected))
22
+ SS[*b].send(method, SS[*a]).should eql(SS[*expected])
23
23
  end
24
24
  end
25
25
  end
@@ -6,11 +6,11 @@ describe Hamster::SortedSet do
6
6
  context "when called without a block" do
7
7
  it "returns a sorted set of all items equal to or less than the argument" do
8
8
  100.times do
9
- items = rand(100).times.collect { rand(1000) }
10
- set = Hamster::SortedSet.new(items)
9
+ items = rand(100).times.collect { rand(1000) }
10
+ set = SS.new(items)
11
11
  threshold = rand(1000)
12
- result = set.up_to(threshold)
13
- array = items.select { |x| x <= threshold }.sort
12
+ result = set.up_to(threshold)
13
+ array = items.select { |x| x <= threshold }.sort
14
14
  result.class.should be(Hamster::SortedSet)
15
15
  result.size.should == array.size
16
16
  result.to_a.should == array
@@ -21,10 +21,10 @@ describe Hamster::SortedSet do
21
21
  context "when called with a block" do
22
22
  it "yields all the items equal to or less than than the argument" do
23
23
  100.times do
24
- items = rand(100).times.collect { rand(1000) }
25
- set = Hamster::SortedSet.new(items)
24
+ items = rand(100).times.collect { rand(1000) }
25
+ set = SS.new(items)
26
26
  threshold = rand(1000)
27
- result = []
27
+ result = []
28
28
  set.up_to(threshold) { |x| result << x }
29
29
  array = items.select { |x| x <= threshold }.sort
30
30
  result.size.should == array.size
@@ -35,15 +35,16 @@ describe Hamster::SortedSet do
35
35
 
36
36
  context "on an empty set" do
37
37
  it "returns an empty set" do
38
- Hamster::SortedSet.empty.up_to(1).should be_empty
39
- Hamster::SortedSet.empty.up_to('abc').should be_empty
40
- Hamster::SortedSet.empty.up_to(:symbol).should be_empty
38
+ SS.empty.up_to(1).should be_empty
39
+ SS.empty.up_to('abc').should be_empty
40
+ SS.empty.up_to(:symbol).should be_empty
41
+ SS.empty.up_to(nil).should be_empty
41
42
  end
42
43
  end
43
44
 
44
45
  context "with an argument less than all the values in the set" do
45
46
  it "returns an empty set" do
46
- result = Hamster.sorted_set(*(1..100)).up_to(0)
47
+ result = SS.new(1..100).up_to(0)
47
48
  result.class.should be(Hamster::SortedSet)
48
49
  result.should be_empty
49
50
  end
@@ -3,23 +3,23 @@ require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
5
  describe "#values_at" do
6
- let(:sorted_set) { Hamster.sorted_set('a', 'b', 'c') }
6
+ let(:sorted_set) { SS['a', 'b', 'c'] }
7
7
 
8
8
  it "accepts any number of indices, and returns a sorted_set of items at those indices" do
9
- sorted_set.values_at(0).should eql(Hamster.sorted_set('a'))
10
- sorted_set.values_at(1,2).should eql(Hamster.sorted_set('b', 'c'))
9
+ sorted_set.values_at(0).should eql(SS['a'])
10
+ sorted_set.values_at(1,2).should eql(SS['b', 'c'])
11
11
  end
12
12
 
13
13
  context "when passed invalid indices" do
14
14
  it "filters them out" do
15
- sorted_set.values_at(1,2,3).should eql(Hamster.sorted_set('b', 'c'))
16
- sorted_set.values_at(-10,10).should eql(Hamster.sorted_set)
15
+ sorted_set.values_at(1,2,3).should eql(SS['b', 'c'])
16
+ sorted_set.values_at(-10,10).should eql(SS.empty)
17
17
  end
18
18
  end
19
19
 
20
20
  context "when passed no arguments" do
21
21
  it "returns an empty sorted_set" do
22
- sorted_set.values_at.should eql(Hamster.sorted_set)
22
+ sorted_set.values_at.should eql(SS.empty)
23
23
  end
24
24
  end
25
25
 
@@ -2,12 +2,12 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
- [:add, :<<, :conj, :conjoin, :push].each do |method|
7
+ [:add, :<<, :push].each do |method|
8
8
  describe "##{method}" do
9
9
  shared_examples "checking adding values" do
10
- let(:added_vector) { Hamster.vector(*added_values) }
10
+ let(:added_vector) { V[*added_values] }
11
11
 
12
12
  it "preserves the original" do
13
13
  original = vector
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
5
+ let(:vector) { V[*values] }
6
6
 
7
7
  describe "#any?" do
8
8
  let(:any?) { vector.any?(&block) }
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
- let(:vector) { Hamster.vector([:a, 3], [:b, 2], [:c, 1]) }
5
+ let(:vector) { V[[:a, 3], [:b, 2], [:c, 1]] }
6
6
 
7
7
  describe "#assoc" do
8
8
  it "searches for a 2-element array with a given 1st item" do
@@ -17,6 +17,11 @@ describe Hamster::Vector do
17
17
  vector.assoc(EqualNotEql.new).should_not be_nil
18
18
  vector.assoc(EqlNotEqual.new).should be_nil
19
19
  end
20
+
21
+ it "skips elements which are not indexable" do
22
+ V[false, true, nil].assoc(:b).should be_nil
23
+ V[[1,2], nil].assoc(3).should be_nil
24
+ end
20
25
  end
21
26
 
22
27
  describe "#rassoc" do
@@ -32,5 +37,10 @@ describe Hamster::Vector do
32
37
  vector.rassoc(EqualNotEql.new).should_not be_nil
33
38
  vector.rassoc(EqlNotEqual.new).should be_nil
34
39
  end
40
+
41
+ it "skips elements which are not indexable" do
42
+ V[false, true, nil].rassoc(:b).should be_nil
43
+ V[[1,2], nil].rassoc(3).should be_nil
44
+ end
35
45
  end
36
46
  end
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#bsearch" do
6
- let(:vector) { Hamster.vector(5,10,20,30) }
6
+ let(:vector) { V[5,10,20,30] }
7
7
 
8
8
  context "with a block which returns false for elements below desired position, and true for those at/above" do
9
9
  it "returns the first element for which the predicate is true" do
@@ -47,11 +47,19 @@ describe Hamster::Vector do
47
47
  vector.bsearch { |x| x <=> 11 }.should be_nil
48
48
  end
49
49
  end
50
+
51
+ context "if not passed a block" do
52
+ it "returns an Enumerator" do
53
+ enum = vector.bsearch
54
+ enum.should be_a(Enumerator)
55
+ enum.each { |x| x <=> 10 }.should == 10
56
+ end
57
+ end
50
58
  end
51
59
 
52
60
  context "on an empty vector" do
53
61
  it "returns nil" do
54
- Hamster.vector.bsearch { |x| x > 5 }.should be_nil
62
+ V.empty.bsearch { |x| x > 5 }.should be_nil
55
63
  end
56
64
  end
57
65
  end
@@ -9,15 +9,15 @@ describe Hamster::Vector do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  describe "on #{values}" do
12
- let(:vector) { Hamster.vector(*values) }
12
+ let(:vector) { V[*values] }
13
13
 
14
14
  it "preserves the original" do
15
15
  vector.clear
16
- vector.should eql(Hamster.vector(*values))
16
+ vector.should eql(V[*values])
17
17
  end
18
18
 
19
19
  it "returns an empty vector" do
20
- vector.clear.should equal(Hamster.vector)
20
+ vector.clear.should equal(V.empty)
21
21
  end
22
22
  end
23
23
 
@@ -3,7 +3,7 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#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 a block" do
9
9
  it "returns self" do
@@ -59,8 +59,8 @@ describe Hamster::Vector do
59
59
 
60
60
  context "on an empty vector" do
61
61
  it "works the same" do
62
- Hamster.vector.combination(0).to_a.should == [[]]
63
- Hamster.vector.combination(1).to_a.should == []
62
+ V.empty.combination(0).to_a.should == [[]]
63
+ V.empty.combination(1).to_a.should == []
64
64
  end
65
65
  end
66
66
 
@@ -76,7 +76,7 @@ describe Hamster::Vector do
76
76
 
77
77
  it "leaves the original unmodified" do
78
78
  vector.combination(2) {}
79
- vector.should eql(Hamster.vector(1,2,3,4))
79
+ vector.should eql(V[1,2,3,4])
80
80
  end
81
81
  end
82
82
  end
@@ -6,12 +6,12 @@ describe Hamster::Vector do
6
6
  it "returns a new Vector with all nils removed" do
7
7
  V[1, nil, 2, nil].compact.should eql(V[1, 2])
8
8
  V[1, 2, 3].compact.should eql(V[1, 2, 3])
9
- V[nil].compact.should eql(V[])
9
+ V[nil].compact.should eql(V.empty)
10
10
  end
11
11
 
12
12
  context "on an empty vector" do
13
13
  it "returns self" do
14
- Hamster.vector.compact.should be(Hamster.vector)
14
+ V.empty.compact.should be(V.empty)
15
15
  end
16
16
  end
17
17
 
@@ -12,19 +12,19 @@ describe Hamster::Vector do
12
12
  ].each do |items1, items2|
13
13
  describe "with #{items1} and #{items2}" do
14
14
  it "returns -1" do
15
- (Hamster::Vector.new(items1) <=> Hamster::Vector.new(items2)).should be(-1)
15
+ (V.new(items1) <=> V.new(items2)).should be(-1)
16
16
  end
17
17
  end
18
18
 
19
19
  describe "with #{items2} and #{items1}" do
20
20
  it "returns 1" do
21
- (Hamster::Vector.new(items2) <=> Hamster::Vector.new(items1)).should be(1)
21
+ (V.new(items2) <=> V.new(items1)).should be(1)
22
22
  end
23
23
  end
24
24
 
25
25
  describe "with #{items1} and #{items1}" do
26
26
  it "returns 0" do
27
- (Hamster::Vector.new(items1) <=> Hamster::Vector.new(items1)).should be(0)
27
+ (V.new(items1) <=> V.new(items1)).should be(0)
28
28
  end
29
29
  end
30
30
  end
@@ -16,8 +16,8 @@ describe Hamster::Vector do
16
16
  vector.concat(1..1000).should eql(V.new((1..100).to_a + (1..1000).to_a))
17
17
  vector.concat(1..200).size.should == 300
18
18
  vector.concat(vector).should eql(V.new((1..100).to_a * 2))
19
- vector.concat(Hamster::EmptyVector).should eql(vector)
20
- Hamster::EmptyVector.concat(vector).should eql(vector)
19
+ vector.concat(V.empty).should eql(vector)
20
+ V.empty.concat(vector).should eql(vector)
21
21
  end
22
22
 
23
23
  [1, 31, 32, 33, 1023, 1024, 1025].each do |size|
@@ -10,7 +10,7 @@ describe Hamster::Vector do
10
10
  (1..32),
11
11
  ].each do |values|
12
12
  describe "on #{values.inspect}" do
13
- let(:vector) { Hamster.vector(*values) }
13
+ let(:vector) { V[*values] }
14
14
 
15
15
  it "returns self" do
16
16
  vector.send(method).should equal(vector)
@@ -3,12 +3,12 @@ require "hamster/vector"
3
3
 
4
4
  describe Hamster::Vector do
5
5
  describe "#delete_at" do
6
- let(:vector) { Hamster.vector(1,2,3,4,5) }
6
+ let(:vector) { V[1,2,3,4,5] }
7
7
 
8
8
  it "removes the element at the specified index" do
9
- vector.delete_at(0).should eql(Hamster.vector(2,3,4,5))
10
- vector.delete_at(2).should eql(Hamster.vector(1,2,4,5))
11
- vector.delete_at(-1).should eql(Hamster.vector(1,2,3,4))
9
+ vector.delete_at(0).should eql(V[2,3,4,5])
10
+ vector.delete_at(2).should eql(V[1,2,4,5])
11
+ vector.delete_at(-1).should eql(V[1,2,3,4])
12
12
  end
13
13
 
14
14
  it "makes no modification if the index is out of range" do
@@ -23,13 +23,13 @@ describe Hamster::Vector do
23
23
  end
24
24
 
25
25
  it "works on an empty vector" do
26
- Hamster.vector.delete_at(0).should be(Hamster.vector)
27
- Hamster.vector.delete_at(1).should be(Hamster.vector)
26
+ V.empty.delete_at(0).should be(V.empty)
27
+ V.empty.delete_at(1).should be(V.empty)
28
28
  end
29
29
 
30
30
  it "works on a vector with 1 item" do
31
- Hamster.vector(10).delete_at(0).should eql(Hamster.vector)
32
- Hamster.vector(10).delete_at(1).should eql(Hamster.vector(10))
31
+ V[10].delete_at(0).should eql(V.empty)
32
+ V[10].delete_at(1).should eql(V[10])
33
33
  end
34
34
 
35
35
  it "works on a vector with 32 items" do
@@ -10,13 +10,13 @@ describe Hamster::Vector do
10
10
  V[1,2,3].delete(0).should eql(V[1,2,3])
11
11
  V['a','b','a','c','a','a','d'].delete('a').should eql(V['b','c','d'])
12
12
 
13
- V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V[])
13
+ V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V.empty)
14
14
  V[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
15
15
  end
16
16
 
17
17
  context "on an empty vector" do
18
18
  it "returns self" do
19
- Hamster.vector.delete(1).should be(Hamster.vector)
19
+ V.empty.delete(1).should be(V.empty)
20
20
  end
21
21
  end
22
22
 
@@ -14,15 +14,15 @@ describe Hamster::Vector do
14
14
  [(1..33), 32, [33]]
15
15
  ].each do |values, number, expected|
16
16
  describe "#{number} from #{values.inspect}" do
17
- let(:vector) { Hamster.vector(*values) }
17
+ let(:vector) { V[*values] }
18
18
 
19
19
  it "preserves the original" do
20
20
  vector.drop(number)
21
- vector.should eql(Hamster.vector(*values))
21
+ vector.should eql(V[*values])
22
22
  end
23
23
 
24
24
  it "returns #{expected.inspect}" do
25
- vector.drop(number).should eql(Hamster.vector(*expected))
25
+ vector.drop(number).should eql(V[*expected])
26
26
  end
27
27
  end
28
28
  end
@@ -31,5 +31,12 @@ describe Hamster::Vector do
31
31
  -> { V[1, 2, 3].drop(-1) }.should raise_error(ArgumentError)
32
32
  -> { V[1, 2, 3].drop(-3) }.should raise_error(ArgumentError)
33
33
  end
34
+
35
+ context "when number of elements specified is zero" do
36
+ let(:vector) { V[1, 2, 3, 4, 5, 6] }
37
+ it "returns self" do
38
+ vector.drop(0).should be(vector)
39
+ end
40
+ end
34
41
  end
35
42
  end
@@ -9,25 +9,25 @@ describe Hamster::Vector do
9
9
  [%w[A B C], ["C"]],
10
10
  ].each do |values, expected|
11
11
  describe "on #{values.inspect}" do
12
- let(:vector) { Hamster.vector(*values) }
12
+ let(:vector) { V[*values] }
13
13
 
14
14
  describe "with a block" do
15
15
  let(:result) { vector.drop_while { |item| item < "C" } }
16
16
 
17
17
  it "preserves the original" do
18
18
  result
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
- result.should eql(Hamster.vector(*expected))
23
+ result.should eql(V[*expected])
24
24
  end
25
25
  end
26
26
 
27
27
  describe "without a block" do
28
28
  it "returns an Enumerator" do
29
29
  vector.drop_while.class.should be(Enumerator)
30
- vector.drop_while.each { |item| item < "C" }.should eql(Hamster.vector(*expected))
30
+ vector.drop_while.each { |item| item < "C" }.should eql(V[*expected])
31
31
  end
32
32
  end
33
33
  end
@@ -35,7 +35,7 @@ describe Hamster::Vector do
35
35
 
36
36
  context "on an empty vector" do
37
37
  it "returns an empty vector" do
38
- Hamster.vector.drop_while { false }.should eql(Hamster.vector)
38
+ V.empty.drop_while { false }.should eql(V.empty)
39
39
  end
40
40
  end
41
41