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
@@ -6,9 +6,9 @@ describe Hamster::Deque do
6
6
  it "accepts a single enumerable argument and creates a new deque" do
7
7
  deque = Hamster::Deque.new([1,2,3])
8
8
  deque.size.should be(3)
9
- deque.head.should be(1)
10
- deque.dequeue.head.should be(2)
11
- deque.dequeue.dequeue.head.should be(3)
9
+ deque.first.should be(1)
10
+ deque.dequeue.first.should be(2)
11
+ deque.dequeue.dequeue.first.should be(3)
12
12
  end
13
13
 
14
14
  it "is amenable to overriding of #initialize" do
@@ -37,8 +37,8 @@ describe Hamster::Deque do
37
37
  it "accepts a variable number of items and creates a new deque" do
38
38
  deque = Hamster::Deque['a', 'b']
39
39
  deque.size.should be(2)
40
- deque.head.should == 'a'
41
- deque.dequeue.head.should == 'b'
40
+ deque.first.should == 'a'
41
+ deque.dequeue.first.should == 'b'
42
42
  end
43
43
  end
44
44
  end
@@ -9,16 +9,28 @@ describe Hamster::Deque 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(:deque) { Hamster.deque(*values) }
12
+ let(:deque) { D[*values] }
13
13
 
14
14
  it "preserves the original" do
15
15
  deque.pop
16
- deque.should eql(Hamster.deque(*values))
16
+ deque.should eql(D[*values])
17
17
  end
18
18
 
19
19
  it "returns #{expected.inspect}" do
20
- deque.pop.should eql(Hamster.deque(*expected))
20
+ deque.pop.should eql(D[*expected])
21
21
  end
22
+
23
+ it "returns a frozen instance" do
24
+ deque.pop.should be_frozen
25
+ end
26
+ end
27
+ end
28
+
29
+ context "on empty subclass" do
30
+ let(:subclass) { Class.new(Hamster::Deque) }
31
+ let(:empty_instance) { subclass.new }
32
+ it "returns emtpy object of same class" do
33
+ empty_instance.pop.class.should be subclass
22
34
  end
23
35
  end
24
36
  end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+ require "hamster/deque"
3
+ require "pp"
4
+ require "stringio"
5
+
6
+ describe Hamster::Deque do
7
+ describe "#pretty_print" do
8
+ let(:deque) { Hamster::Deque["AAAA", "BBBB", "CCCC"] }
9
+ let(:stringio) { StringIO.new }
10
+
11
+ it "prints the whole Deque on one line if it fits" do
12
+ PP.pp(deque, stringio, 80)
13
+ stringio.string.chomp.should == 'Hamster::Deque["AAAA", "BBBB", "CCCC"]'
14
+ end
15
+
16
+ it "prints each item on its own line, if not" do
17
+ PP.pp(deque, stringio, 10)
18
+ stringio.string.chomp.should == 'Hamster::Deque[
19
+ "AAAA",
20
+ "BBBB",
21
+ "CCCC"]'
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+ require "hamster/deque"
3
+
4
+ describe Hamster::Deque do
5
+ describe "#push" do
6
+ [
7
+ [[], "A", ["A"]],
8
+ [["A"], "B", %w[A B]],
9
+ [%w[A B C], "D", %w[A B C D]],
10
+ ].each do |original, item, expected|
11
+ context "pushing #{item.inspect} into #{original.inspect}" do
12
+ let(:deque) { D.new(original) }
13
+
14
+ it "preserves the original" do
15
+ deque.push(item)
16
+ deque.should eql(D.new(original))
17
+ end
18
+
19
+ it "returns #{expected.inspect}" do
20
+ deque.push(item).should eql(D.new(expected))
21
+ end
22
+
23
+ it "returns a frozen instance" do
24
+ deque.push(item).should be_frozen
25
+ end
26
+ end
27
+ end
28
+
29
+ context "on a subclass" do
30
+ let(:subclass) { Class.new(Hamster::Deque) }
31
+ let(:empty_instance) { subclass.new }
32
+ it "returns an object of same class" do
33
+ empty_instance.push(1).class.should be subclass
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+ require "hamster/deque"
3
+
4
+ describe Hamster::Deque do
5
+ describe "#shift" do
6
+ [
7
+ [[], []],
8
+ [["A"], []],
9
+ [%w[A B C], %w[B C]],
10
+ ].each do |values, expected|
11
+ context "on #{values.inspect}" do
12
+ let(:deque) { D.new(values) }
13
+
14
+ it "preserves the original" do
15
+ deque.shift
16
+ deque.should eql(D.new(values))
17
+ end
18
+
19
+ it "returns #{expected.inspect}" do
20
+ deque.shift.should eql(D.new(expected))
21
+ end
22
+
23
+
24
+ it "returns a frozen instance" do
25
+ deque.shift.should be_frozen
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -11,7 +11,7 @@ describe Hamster::Deque do
11
11
  ].each do |values, expected|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns #{expected.inspect}" do
14
- Hamster.deque(*values).send(method).should == expected
14
+ D[*values].send(method).should == expected
15
15
  end
16
16
  end
17
17
  end
@@ -11,11 +11,11 @@ describe Hamster::Deque do
11
11
  ].each do |values|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns #{values.inspect}" do
14
- Hamster.deque(*values).send(method).should == values
14
+ D[*values].send(method).should == values
15
15
  end
16
16
 
17
17
  it "returns a mutable array" do
18
- result = Hamster.deque(*values).send(method)
18
+ result = D[*values].send(method)
19
19
  expect(result.last).to_not eq("The End")
20
20
  result << "The End"
21
21
  result.last.should == "The End"
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/deque"
3
3
 
4
4
  describe Hamster::Deque do
5
- let(:deque) { Hamster.deque("A", "B", "C", "D") }
5
+ let(:deque) { D["A", "B", "C", "D"] }
6
6
 
7
7
  describe "#to_ary" do
8
8
  context "enables implicit conversion to" do
@@ -11,15 +11,15 @@ describe Hamster::Deque do
11
11
  ].each do |values|
12
12
  context "on #{values.inspect}" do
13
13
  it "returns a list containing #{values.inspect}" do
14
- Hamster.deque(*values).to_list.should eql(Hamster.list(*values))
14
+ D[*values].to_list.should eql(L[*values])
15
15
  end
16
16
  end
17
17
  end
18
18
 
19
19
  context "after dedequeing an item from #{%w[A B C].inspect}" do
20
20
  it "returns a list containing #{%w[B C].inspect}" do
21
- list = Hamster.deque("A", "B", "C").dequeue.to_list
22
- list.should eql(Hamster.list("B", "C"))
21
+ list = D["A", "B", "C"].dequeue.to_list
22
+ list.should eql(L["B", "C"])
23
23
  end
24
24
  end
25
25
  end
@@ -10,15 +10,20 @@ describe Hamster::Deque do
10
10
  [%w[A B C], "D", %w[D A B C]],
11
11
  ].each do |values, new_value, expected|
12
12
  context "on #{values.inspect} with #{new_value.inspect}" do
13
- let(:deque) { Hamster.deque(*values) }
13
+ let(:deque) { D[*values] }
14
14
 
15
15
  it "preserves the original" do
16
16
  deque.unshift(new_value)
17
- deque.should eql(Hamster.deque(*values))
17
+ deque.should eql(D[*values])
18
18
  end
19
19
 
20
20
  it "returns #{expected.inspect}" do
21
- deque.unshift(new_value).should eql(Hamster.deque(*expected))
21
+ deque.unshift(new_value).should eql(D[*expected])
22
+ end
23
+
24
+
25
+ it "returns a frozen instance" do
26
+ deque.unshift(new_value).should be_frozen
22
27
  end
23
28
  end
24
29
  end
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  require "hamster/experimental/mutable_set"
4
4
 
5
5
  describe Hamster::MutableSet do
6
- let(:mutable) { Hamster.mutable_set(*values) }
6
+ let(:mutable) { Hamster::MutableSet[*values] }
7
7
 
8
8
  describe "#add?" do
9
9
  let(:values) { %w[A B C] }
@@ -18,7 +18,7 @@ describe Hamster::MutableSet do
18
18
 
19
19
  it "modifies the set to include the new value" do
20
20
  add?
21
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C", "D"))
21
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C", "D"])
22
22
  end
23
23
 
24
24
  end
@@ -32,7 +32,7 @@ describe Hamster::MutableSet do
32
32
 
33
33
  it "preserves the original values" do
34
34
  add?
35
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C"))
35
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C"])
36
36
  end
37
37
  end
38
38
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/experimental/mutable_set"
3
3
 
4
4
  describe Hamster::MutableSet do
5
- let(:mutable) { Hamster.mutable_set(*values) }
5
+ let(:mutable) { Hamster::MutableSet[*values] }
6
6
 
7
7
  describe "#add" do
8
8
  let(:values) { %w[A B C] }
@@ -17,7 +17,7 @@ describe Hamster::MutableSet do
17
17
 
18
18
  it "modifies the original set to include new value" do
19
19
  add
20
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C", "D"))
20
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C", "D"])
21
21
  end
22
22
  end
23
23
 
@@ -30,7 +30,7 @@ describe Hamster::MutableSet do
30
30
 
31
31
  it "preserves the original values" do
32
32
  add
33
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C"))
33
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C"])
34
34
  end
35
35
  end
36
36
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/experimental/mutable_set"
3
3
 
4
4
  describe Hamster::MutableSet do
5
- let(:mutable) { Hamster.mutable_set(*values) }
5
+ let(:mutable) { Hamster::MutableSet[*values] }
6
6
 
7
7
  describe "#delete?" do
8
8
  let(:values) { %w[A B C] }
@@ -18,7 +18,7 @@ describe Hamster::MutableSet do
18
18
 
19
19
  it "modifies the set to remove the value" do
20
20
  delete?
21
- expect(mutable).to eq(Hamster.mutable_set("A", "C"))
21
+ expect(mutable).to eq(Hamster::MutableSet["A", "C"])
22
22
  end
23
23
  end
24
24
 
@@ -31,7 +31,7 @@ describe Hamster::MutableSet do
31
31
 
32
32
  it "preserves the original values" do
33
33
  delete?
34
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C"))
34
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C"])
35
35
  end
36
36
  end
37
37
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/experimental/mutable_set"
3
3
 
4
4
  describe Hamster::MutableSet do
5
- let(:mutable) { Hamster.mutable_set(*values) }
5
+ let(:mutable) { Hamster::MutableSet[*values] }
6
6
 
7
7
  describe "#delete" do
8
8
  let(:values) { %w[A B C] }
@@ -17,7 +17,7 @@ describe Hamster::MutableSet do
17
17
 
18
18
  it "modifies the set to remove the value" do
19
19
  delete
20
- expect(mutable).to eq(Hamster.mutable_set("A", "C"))
20
+ expect(mutable).to eq(Hamster::MutableSet["A", "C"])
21
21
  end
22
22
  end
23
23
 
@@ -30,7 +30,7 @@ describe Hamster::MutableSet do
30
30
 
31
31
  it "preserves the original values" do
32
32
  delete
33
- expect(mutable).to eq(Hamster.mutable_set("A", "B", "C"))
33
+ expect(mutable).to eq(Hamster::MutableSet["A", "B", "C"])
34
34
  end
35
35
  end
36
36
  end
@@ -2,53 +2,51 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- let(:hash) { Hamster.hash(values) }
5
+ let(:hash) { H[values] }
6
6
 
7
- [:all?, :forall?].each do |method|
8
- describe "##{method}" do
9
- context "when empty" do
10
- let(:values) { Hash.new }
7
+ describe "#all?" do
8
+ context "when empty" do
9
+ let(:values) { H.new }
11
10
 
12
- context "without a block" do
13
- it "returns true" do
14
- hash.send(method).should == true
15
- end
11
+ context "without a block" do
12
+ it "returns true" do
13
+ hash.all?.should == true
16
14
  end
15
+ end
17
16
 
18
- context "with a block" do
19
- it "returns true" do
20
- hash.send(method) { false }.should == true
21
- end
17
+ context "with a block" do
18
+ it "returns true" do
19
+ hash.all? { false }.should == true
22
20
  end
23
21
  end
22
+ end
24
23
 
25
- context "when not empty" do
26
- let(:values) { { "A" => 1, "B" => 2, "C" => 3 } }
24
+ context "when not empty" do
25
+ let(:values) { { "A" => 1, "B" => 2, "C" => 3 } }
27
26
 
28
- context "without a block" do
29
- it "returns true" do
30
- hash.send(method).should == true
31
- end
27
+ context "without a block" do
28
+ it "returns true" do
29
+ hash.all?.should == true
32
30
  end
31
+ end
33
32
 
34
- context "with a block" do
35
- it "returns true if the block always returns true" do
36
- hash.send(method) { true }.should == true
37
- end
33
+ context "with a block" do
34
+ it "returns true if the block always returns true" do
35
+ hash.all? { true }.should == true
36
+ end
38
37
 
39
- it "returns false if the block ever returns false" do
40
- hash.send(method) { |k,v| k != 'C' }.should == false
41
- end
38
+ it "returns false if the block ever returns false" do
39
+ hash.all? { |k,v| k != 'C' }.should == false
40
+ end
42
41
 
43
- it "propagates an exception from the block" do
44
- -> { hash.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
45
- end
42
+ it "propagates an exception from the block" do
43
+ -> { hash.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
44
+ end
46
45
 
47
- it "stops iterating as soon as the block returns false" do
48
- yielded = []
49
- hash.all? { |k,v| yielded << k; false }
50
- yielded.size.should == 1
51
- end
46
+ it "stops iterating as soon as the block returns false" do
47
+ yielded = []
48
+ hash.all? { |k,v| yielded << k; false }
49
+ yielded.size.should == 1
52
50
  end
53
51
  end
54
52
  end
@@ -2,53 +2,51 @@ require "spec_helper"
2
2
  require "hamster/hash"
3
3
 
4
4
  describe Hamster::Hash do
5
- [:any?, :exist?, :exists?].each do |method|
6
- describe "##{method}" do
7
- context "when empty" do
8
- it "with a block returns false" do
9
- Hamster.hash.send(method) {}.should == false
10
- end
11
-
12
- it "with no block returns false" do
13
- Hamster.hash.send(method).should == false
14
- end
5
+ describe "#any?" do
6
+ context "when empty" do
7
+ it "with a block returns false" do
8
+ H.empty.any? {}.should == false
15
9
  end
16
10
 
17
- context "when not empty" do
18
- let(:hash) { Hamster.hash("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
11
+ it "with no block returns false" do
12
+ H.empty.any?.should == false
13
+ end
14
+ end
19
15
 
20
- context "with a block" do
21
- [
22
- %w[A aye],
23
- %w[B bee],
24
- %w[C see],
25
- [nil, "NIL"],
26
- ].each do |pair|
16
+ context "when not empty" do
17
+ let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
27
18
 
28
- it "returns true if the block ever returns true (#{pair.inspect})" do
29
- hash.send(method) { |key, value| key == pair.first && value == pair.last }.should == true
30
- end
19
+ context "with a block" do
20
+ [
21
+ %w[A aye],
22
+ %w[B bee],
23
+ %w[C see],
24
+ [nil, "NIL"],
25
+ ].each do |pair|
31
26
 
32
- it "returns false if the block always returns false" do
33
- hash.send(method) { |key, value| key == "D" && value == "dee" }.should == false
34
- end
27
+ it "returns true if the block ever returns true (#{pair.inspect})" do
28
+ hash.any? { |key, value| key == pair.first && value == pair.last }.should == true
35
29
  end
36
30
 
37
- it "propagates exceptions raised in the block" do
38
- -> { hash.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
31
+ it "returns false if the block always returns false" do
32
+ hash.any? { |key, value| key == "D" && value == "dee" }.should == false
39
33
  end
34
+ end
40
35
 
41
- it "stops iterating as soon as the block returns true" do
42
- yielded = []
43
- hash.any? { |k,v| yielded << k; true }
44
- yielded.size.should == 1
45
- end
36
+ it "propagates exceptions raised in the block" do
37
+ -> { hash.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
46
38
  end
47
39
 
48
- context "with no block" do
49
- it "returns true" do
50
- hash.send(method).should == true
51
- end
40
+ it "stops iterating as soon as the block returns true" do
41
+ yielded = []
42
+ hash.any? { |k,v| yielded << k; true }
43
+ yielded.size.should == 1
44
+ end
45
+ end
46
+
47
+ context "with no block" do
48
+ it "returns true" do
49
+ hash.any?.should == true
52
50
  end
53
51
  end
54
52
  end