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
@@ -19,15 +19,15 @@ describe Hamster::List do
19
19
  [[nil, "B", nil], ["B"]],
20
20
  ].each do |values, expected|
21
21
  context "on #{values.inspect}" do
22
- let(:list) { Hamster.list(*values) }
22
+ let(:list) { L[*values] }
23
23
 
24
24
  it "preserves the original" do
25
25
  list.compact
26
- list.should eql(Hamster.list(*values))
26
+ list.should eql(L[*values])
27
27
  end
28
28
 
29
29
  it "returns #{expected.inspect}" do
30
- list.compact.should eql(Hamster.list(*expected))
30
+ list.compact.should eql(L[*expected])
31
31
  end
32
32
  end
33
33
  end
@@ -11,19 +11,19 @@ describe Hamster::List do
11
11
  ].each do |items1, items2|
12
12
  context "with #{items1} and #{items2}" do
13
13
  it "returns -1" do
14
- (Hamster.list(*items1) <=> Hamster.list(*items2)).should be(-1)
14
+ (L[*items1] <=> L[*items2]).should be(-1)
15
15
  end
16
16
  end
17
17
 
18
18
  context "with #{items2} and #{items1}" do
19
19
  it "returns 1" do
20
- (Hamster.list(*items2) <=> Hamster.list(*items1)).should be(1)
20
+ (L[*items2] <=> L[*items1]).should be(1)
21
21
  end
22
22
  end
23
23
 
24
24
  context "with #{items1} and #{items1}" do
25
25
  it "returns 0" do
26
- (Hamster.list(*items1) <=> Hamster.list(*items1)).should be(0)
26
+ (L[*items1] <=> L[*items1]).should be(0)
27
27
  end
28
28
  end
29
29
  end
@@ -2,25 +2,23 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:cons, :>>].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], "A", ["A"]],
9
- [["A"], "B", %w[B A]],
10
- [["A"], "A", %w[A A]],
11
- [%w[A B C], "D", %w[D A B C]],
12
- ].each do |values, new_value, expected|
13
- context "on #{values.inspect} with #{new_value.inspect}" do
14
- let(:list) { Hamster.list(*values) }
5
+ describe "#cons" do
6
+ [
7
+ [[], "A", ["A"]],
8
+ [["A"], "B", %w[B A]],
9
+ [["A"], "A", %w[A A]],
10
+ [%w[A B C], "D", %w[D A B C]],
11
+ ].each do |values, new_value, expected|
12
+ context "on #{values.inspect} with #{new_value.inspect}" do
13
+ let(:list) { L[*values] }
15
14
 
16
- it "preserves the original" do
17
- list.send(method, new_value)
18
- list.should eql(Hamster.list(*values))
19
- end
15
+ it "preserves the original" do
16
+ list.cons(new_value)
17
+ list.should eql(L[*values])
18
+ end
20
19
 
21
- it "returns #{expected.inspect}" do
22
- list.send(method, new_value).should eql(Hamster.list(*expected))
23
- end
20
+ it "returns #{expected.inspect}" do
21
+ list.cons(new_value).should eql(L[*expected])
24
22
  end
25
23
  end
26
24
  end
@@ -5,21 +5,21 @@ describe Hamster do
5
5
  describe ".list" do
6
6
  context "with no arguments" do
7
7
  it "always returns the same instance" do
8
- Hamster.list.should equal(Hamster.list)
8
+ L.empty.should equal(L.empty)
9
9
  end
10
10
 
11
11
  it "returns an empty list" do
12
- Hamster.list.should be_empty
12
+ L.empty.should be_empty
13
13
  end
14
14
  end
15
15
 
16
16
  context "with a number of items" do
17
17
  it "always returns a different instance" do
18
- Hamster.list("A", "B", "C").should_not equal(Hamster.list("A", "B", "C"))
18
+ L["A", "B", "C"].should_not equal(L["A", "B", "C"])
19
19
  end
20
20
 
21
21
  it "is the same as repeatedly using #cons" do
22
- Hamster.list("A", "B", "C").should eql(Hamster.list.cons("C").cons("B").cons("A"))
22
+ L["A", "B", "C"].should eql(L.empty.cons("C").cons("B").cons("A"))
23
23
  end
24
24
  end
25
25
  end
@@ -27,7 +27,7 @@ describe Hamster do
27
27
  describe ".stream" do
28
28
  context "with no block" do
29
29
  it "returns an empty list" do
30
- Hamster.stream.should eql(Hamster.list)
30
+ Hamster.stream.should eql(L.empty)
31
31
  end
32
32
  end
33
33
 
@@ -35,51 +35,44 @@ describe Hamster do
35
35
  let(:list) { count = 0; Hamster.stream { count += 1 }}
36
36
 
37
37
  it "repeatedly calls the block" do
38
- list.take(5).should eql(Hamster.list(1, 2, 3, 4, 5))
38
+ list.take(5).should eql(L[1, 2, 3, 4, 5])
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
- [:interval, :range].each do |method|
44
- describe ".#{method}" do
45
- context "for numbers" do
46
- it "is equivalent to a list with explicit values" do
47
- Hamster.send(method, 98, 102).should eql(Hamster.list(98, 99, 100, 101, 102))
48
- end
43
+ describe ".interval" do
44
+ context "for numbers" do
45
+ it "is equivalent to a list with explicit values" do
46
+ Hamster.interval(98, 102).should eql(L[98, 99, 100, 101, 102])
49
47
  end
48
+ end
50
49
 
51
- context "for strings" do
52
- it "is equivalent to a list with explicit values" do
53
- Hamster.send(method, "A", "AA").should eql(Hamster.list("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"))
54
- end
50
+ context "for strings" do
51
+ it "is equivalent to a list with explicit values" do
52
+ Hamster.interval("A", "AA").should eql(L["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"])
55
53
  end
56
54
  end
57
55
  end
58
56
 
59
57
  describe ".repeat" do
60
58
  it "returns an infinite list with specified value for each element" do
61
- Hamster.repeat("A").take(5).should eql(Hamster.list("A", "A", "A", "A", "A"))
59
+ Hamster.repeat("A").take(5).should eql(L["A", "A", "A", "A", "A"])
62
60
  end
63
61
  end
64
62
 
65
63
  describe ".replicate" do
66
64
  it "returns a list with the specified value repeated the specified number of times" do
67
- Hamster.replicate(5, "A").should eql(Hamster.list("A", "A", "A", "A", "A"))
65
+ Hamster.replicate(5, "A").should eql(L["A", "A", "A", "A", "A"])
68
66
  end
69
67
  end
70
68
 
71
69
  describe ".iterate" do
72
70
  it "returns an infinite list where the first item is calculated by applying the block on the initial argument, the second item by applying the function on the previous result and so on" do
73
- Hamster.iterate(1) { |item| item * 2 }.take(10).should eql(Hamster.list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512))
71
+ Hamster.iterate(1) { |item| item * 2 }.take(10).should eql(L[1, 2, 4, 8, 16, 32, 64, 128, 256, 512])
74
72
  end
75
73
  end
76
74
 
77
75
  describe ".enumerate" do
78
- let(:counter) do
79
- i = 0
80
- -> { i += 1 }
81
- end
82
-
83
76
  let(:enum) do
84
77
  Enumerator.new do |yielder|
85
78
  yielder << 1
@@ -92,7 +85,7 @@ describe Hamster do
92
85
  let(:list) { Hamster.enumerate(enum) }
93
86
 
94
87
  it "returns a list based on the values yielded from the enumerator" do
95
- expect(list.take(2)).to eq Hamster.list(1, 2)
88
+ expect(list.take(2)).to eq L[1, 2]
96
89
  end
97
90
 
98
91
  it "realizes values as they are needed" do
@@ -111,8 +104,8 @@ describe Hamster do
111
104
  end
112
105
 
113
106
  it "returns an empty list when called without arguments" do
114
- Hamster::List[].should be_kind_of(Hamster::List)
115
- Hamster::List[].should be_empty
107
+ L[].should be_kind_of(Hamster::List)
108
+ L[].should be_empty
116
109
  end
117
110
  end
118
111
  end
@@ -9,7 +9,7 @@ describe Hamster::List do
9
9
  %w[A B C],
10
10
  ].each do |values|
11
11
  context "on #{values.inspect}" do
12
- let(:list) { Hamster.list(*values) }
12
+ let(:list) { L[*values] }
13
13
 
14
14
  it "returns self" do
15
15
  list.send(method).should equal(list)
@@ -18,7 +18,7 @@ describe Hamster::List do
18
18
  [[1, 2, 3, 4, 5], 3],
19
19
  ].each do |values, expected|
20
20
  context "on #{values.inspect}" do
21
- let(:list) { Hamster.list(*values) }
21
+ let(:list) { L[*values] }
22
22
 
23
23
  context "with a block" do
24
24
  it "returns #{expected.inspect}" do
@@ -9,20 +9,20 @@ describe Hamster do
9
9
 
10
10
  context "with an empty list" do
11
11
  it "returns an empty list" do
12
- Hamster.list.cycle.should be_empty
12
+ L.empty.cycle.should be_empty
13
13
  end
14
14
  end
15
15
 
16
16
  context "with a non-empty list" do
17
- let(:list) { Hamster.list("A", "B", "C") }
17
+ let(:list) { L["A", "B", "C"] }
18
18
 
19
19
  it "preserves the original" do
20
20
  list.cycle
21
- list.should == Hamster.list("A", "B", "C")
21
+ list.should == L["A", "B", "C"]
22
22
  end
23
23
 
24
24
  it "infinitely cycles through all values" do
25
- list.cycle.take(7).should == Hamster.list("A", "B", "C", "A", "B", "C", "A")
25
+ list.cycle.take(7).should == L["A", "B", "C", "A", "B", "C", "A"]
26
26
  end
27
27
  end
28
28
  end
@@ -3,12 +3,12 @@ require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
5
  describe "#delete_at" do
6
- let(:list) { Hamster.list(1,2,3,4,5) }
6
+ let(:list) { L[1,2,3,4,5] }
7
7
 
8
8
  it "removes the element at the specified index" do
9
- list.delete_at(0).should eql(Hamster.list(2,3,4,5))
10
- list.delete_at(2).should eql(Hamster.list(1,2,4,5))
11
- list.delete_at(-1).should eql(Hamster.list(1,2,3,4))
9
+ list.delete_at(0).should eql(L[2,3,4,5])
10
+ list.delete_at(2).should eql(L[1,2,4,5])
11
+ list.delete_at(-1).should eql(L[1,2,3,4])
12
12
  end
13
13
 
14
14
  it "makes no modification if the index is out of range" do
@@ -15,15 +15,15 @@ describe Hamster::List do
15
15
  [%w[A B C], 2, ["C"]],
16
16
  ].each do |values, number, expected|
17
17
  context "with #{number} from #{values.inspect}" do
18
- let(:list) { Hamster.list(*values) }
18
+ let(:list) { L[*values] }
19
19
 
20
20
  it "preserves the original" do
21
21
  list.drop(number)
22
- list.should eql(Hamster.list(*values))
22
+ list.should eql(L[*values])
23
23
  end
24
24
 
25
25
  it "returns #{expected.inspect}" do
26
- list.drop(number).should == Hamster.list(*expected)
26
+ list.drop(number).should == L[*expected]
27
27
  end
28
28
  end
29
29
  end
@@ -13,16 +13,16 @@ describe Hamster::List do
13
13
  [%w[A B C], ["C"]],
14
14
  ].each do |values, expected|
15
15
  context "on #{values.inspect}" do
16
- let(:list) { Hamster.list(*values) }
16
+ let(:list) { L[*values] }
17
17
 
18
18
  context "with a block" do
19
19
  it "preserves the original" do
20
20
  list.drop_while { |item| item < "C" }
21
- list.should eql(Hamster.list(*values))
21
+ list.should eql(L[*values])
22
22
  end
23
23
 
24
24
  it "returns #{expected.inspect}" do
25
- list.drop_while { |item| item < "C" }.should eql(Hamster.list(*expected))
25
+ list.drop_while { |item| item < "C" }.should eql(L[*expected])
26
26
  end
27
27
  end
28
28
 
@@ -12,15 +12,15 @@ describe Hamster::List do
12
12
 
13
13
  [
14
14
  [[], []],
15
- [["A"], [Hamster.list("A")]],
16
- [%w[A B C], [Hamster.list("A", "B"), Hamster.list("C")]],
15
+ [["A"], [L["A"]]],
16
+ [%w[A B C], [L["A", "B"], L["C"]]],
17
17
  ].each do |values, expected|
18
18
  context "on #{values.inspect}" do
19
- let(:list) { Hamster.list(*values) }
19
+ let(:list) { L[*values] }
20
20
 
21
21
  context "with a block" do
22
22
  it "preserves the original" do
23
- list.should eql(Hamster.list(*values))
23
+ list.should eql(L[*values])
24
24
  end
25
25
 
26
26
  it "iterates over the items in order" do
@@ -37,7 +37,7 @@ describe Hamster::List do
37
37
  context "without a block" do
38
38
  it "preserves the original" do
39
39
  list.send(method, 2)
40
- list.should eql(Hamster.list(*values))
40
+ list.should eql(L[*values])
41
41
  end
42
42
 
43
43
  it "returns an Enumerator" do
@@ -2,42 +2,40 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:each, :foreach].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- it "doesn't run out of stack" do
9
- -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).send(method) { |item| } }.should_not raise_error
10
- end
5
+ describe "#each" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).each { |item| } }.should_not raise_error
11
9
  end
10
+ end
12
11
 
13
- [
14
- [],
15
- ["A"],
16
- %w[A B C],
17
- ].each do |values|
18
- context "on #{values.inspect}" do
19
- let(:list) { Hamster.list(*values) }
12
+ [
13
+ [],
14
+ ["A"],
15
+ %w[A B C],
16
+ ].each do |values|
17
+ context "on #{values.inspect}" do
18
+ let(:list) { L[*values] }
20
19
 
21
- context "with a block" do
22
- it "iterates over the items in order" do
23
- yielded = []
24
- list.send(method) { |item| yielded << item }
25
- yielded.should == values
26
- end
20
+ context "with a block" do
21
+ it "iterates over the items in order" do
22
+ yielded = []
23
+ list.each { |item| yielded << item }
24
+ yielded.should == values
25
+ end
27
26
 
28
- it "returns nil" do
29
- list.send(method) { |item| item }.should be_nil
30
- end
27
+ it "returns nil" do
28
+ list.each { |item| item }.should be_nil
31
29
  end
30
+ end
32
31
 
33
- context "without a block" do
34
- it "returns an Enumerator" do
35
- list.send(method).class.should be(Enumerator)
36
- list.send(method).to_list.should eql(list)
37
- end
32
+ context "without a block" do
33
+ it "returns an Enumerator" do
34
+ list.each.class.should be(Enumerator)
35
+ Hamster::List[*list.each].should eql(list)
38
36
  end
39
37
  end
40
38
  end
41
39
  end
42
40
  end
43
- end
41
+ end
@@ -4,7 +4,7 @@ require "hamster/list"
4
4
  describe Hamster::List do
5
5
  describe "#each_with_index" do
6
6
  context "with no block" do
7
- let(:list) { Hamster.list("A", "B", "C") }
7
+ let(:list) { L["A", "B", "C"] }
8
8
 
9
9
  it "returns an Enumerator" do
10
10
  list.each_with_index.class.should be(Enumerator)
@@ -2,23 +2,21 @@ require "spec_helper"
2
2
  require "hamster/list"
3
3
 
4
4
  describe Hamster::List do
5
- [:empty?, :null?].each do |method|
6
- describe "##{method}" do
7
- context "on a really big list" do
8
- it "doesn't run out of stack" do
9
- -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).filter(&:nil?).empty? }.should_not raise_error
10
- end
5
+ describe "#empty?" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).select(&:nil?).empty? }.should_not raise_error
11
9
  end
10
+ end
12
11
 
13
- [
14
- [[], true],
15
- [["A"], false],
16
- [%w[A B C], false],
17
- ].each do |values, expected|
18
- context "on #{values.inspect}" do
19
- it "returns #{expected.inspect}" do
20
- Hamster.list(*values).send(method).should == expected
21
- end
12
+ [
13
+ [[], true],
14
+ [["A"], false],
15
+ [%w[A B C], false],
16
+ ].each do |values, expected|
17
+ context "on #{values.inspect}" do
18
+ it "returns #{expected.inspect}" do
19
+ L[*values].empty?.should == expected
22
20
  end
23
21
  end
24
22
  end