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
@@ -2,19 +2,17 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:empty?, :null?].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], true],
9
- [["A"], false],
10
- [%w[A B C], false],
11
- [[nil], false],
12
- [[false], false]
13
- ].each do |values, expected|
14
- describe "on #{values.inspect}" do
15
- it "returns #{expected.inspect}" do
16
- Hamster.set(*values).send(method).should == expected
17
- end
5
+ describe "#empty?" do
6
+ [
7
+ [[], true],
8
+ [["A"], false],
9
+ [%w[A B C], false],
10
+ [[nil], false],
11
+ [[false], false]
12
+ ].each do |values, expected|
13
+ describe "on #{values.inspect}" do
14
+ it "returns #{expected.inspect}" do
15
+ S[*values].empty?.should == expected
18
16
  end
19
17
  end
20
18
  end
@@ -22,9 +20,9 @@ describe Hamster::Set do
22
20
 
23
21
  describe ".empty" do
24
22
  it "returns the canonical empty set" do
25
- Hamster::Set.empty.should be_empty
26
- Hamster::Set.empty.object_id.should be(Hamster::Set.empty.object_id)
27
- Hamster::Set.empty.should be(Hamster::EmptySet)
23
+ S.empty.should be_empty
24
+ S.empty.object_id.should be(S[].object_id)
25
+ S.empty.should be(Hamster::EmptySet)
28
26
  end
29
27
 
30
28
  context "from a subclass" do
@@ -34,7 +32,7 @@ describe Hamster::Set do
34
32
  subclass.empty.should be_empty
35
33
  end
36
34
 
37
- it "calls overridden #initialize when creating empty Hash" do
35
+ it "calls overridden #initialize when creating empty Set" do
38
36
  subclass = Class.new(Hamster::Set) do
39
37
  def initialize
40
38
  @variable = 'value'
@@ -3,8 +3,8 @@ require "set"
3
3
  require "hamster/set"
4
4
 
5
5
  describe Hamster::Set do
6
- let(:set) { Hamster.set(*values) }
7
- let(:comparison) { Hamster.set(*comparison_values) }
6
+ let(:set) { S[*values] }
7
+ let(:comparison) { S[*comparison_values] }
8
8
 
9
9
  describe "#==" do
10
10
  let(:eqeq) { set == comparison }
@@ -18,7 +18,7 @@ describe Hamster::Set do
18
18
  end
19
19
 
20
20
  context "when comparing to a standard set" do
21
- let(:comparison) { Set.new(%w[A B C]) }
21
+ let(:comparison) { ::Set.new(%w[A B C]) }
22
22
 
23
23
  include_examples "comparing non-sets"
24
24
  end
@@ -3,8 +3,8 @@ require "set"
3
3
  require "hamster/set"
4
4
 
5
5
  describe Hamster::Set do
6
- let(:set) { Hamster.set(*values) }
7
- let(:comparison) { Hamster.set(*comparison_values) }
6
+ let(:set) { S[*values] }
7
+ let(:comparison) { S[*comparison_values] }
8
8
 
9
9
  describe "#eql?" do
10
10
  let(:eql?) { set.eql?(comparison) }
@@ -18,7 +18,7 @@ describe Hamster::Set do
18
18
  end
19
19
 
20
20
  context "when comparing to a standard set" do
21
- let(:comparison) { Set.new(%w[A B C]) }
21
+ let(:comparison) { ::Set.new(%w[A B C]) }
22
22
 
23
23
  include_examples "comparing non-sets"
24
24
  end
@@ -13,24 +13,24 @@ describe Hamster::Set do
13
13
  [%w[A B C], %w[D E F], %w[A B C D E F]],
14
14
  ].each do |a, b, expected|
15
15
  context "for #{a.inspect} and #{b.inspect}" do
16
- let(:set_a) { Hamster.set(*a) }
17
- let(:set_b) { Hamster.set(*b) }
16
+ let(:set_a) { S[*a] }
17
+ let(:set_b) { S[*b] }
18
18
  let(:result) { set_a.send(method, set_b) }
19
19
 
20
20
  it "doesn't modify the original Sets" do
21
21
  result
22
- set_a.should eql(Hamster::Set.new(a))
23
- set_b.should eql(Hamster::Set.new(b))
22
+ set_a.should eql(S.new(a))
23
+ set_b.should eql(S.new(b))
24
24
  end
25
25
 
26
26
  it "returns #{expected.inspect}" do
27
- result.should eql(Hamster.set(*expected))
27
+ result.should eql(S[*expected])
28
28
  end
29
29
  end
30
30
 
31
31
  context "when passed a Ruby Array" do
32
32
  it "returns the expected Set" do
33
- Hamster.set(*a).exclusion(b.freeze).should eql(Hamster.set(*expected))
33
+ S[*a].exclusion(b.freeze).should eql(S[*expected])
34
34
  end
35
35
  end
36
36
  end
@@ -39,7 +39,7 @@ describe Hamster::Set do
39
39
  50.times do
40
40
  array1 = (1..400).to_a.sample(100)
41
41
  array2 = (1..400).to_a.sample(100)
42
- result = Hamster::Set.new(array1) ^ Hamster::Set.new(array2)
42
+ result = S.new(array1) ^ S.new(array2)
43
43
  result.to_a.sort.should eql(((array1 | array2) - (array1 & array2)).sort)
44
44
  end
45
45
  end
@@ -18,13 +18,13 @@ describe Hamster::Set do
18
18
  describe "on #{values.inspect}" do
19
19
  context "with a block" do
20
20
  it "returns #{expected.inspect}" do
21
- Hamster.set(*values).send(method) { |x| x == item }.should == expected
21
+ S[*values].send(method) { |x| x == item }.should == expected
22
22
  end
23
23
  end
24
24
 
25
25
  context "without a block" do
26
26
  it "returns an Enumerator" do
27
- result = Hamster.set(*values).send(method)
27
+ result = S[*values].send(method)
28
28
  result.class.should be(Enumerator)
29
29
  result.each { |x| x == item}.should == expected
30
30
  end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+ require "hamster/set"
3
+
4
+ describe Hamster::Set do
5
+ describe "#first" do
6
+ context "on an empty set" do
7
+ it "returns nil" do
8
+ S.empty.first.should be_nil
9
+ end
10
+ end
11
+
12
+ context "on a non-empty set" do
13
+ it "returns an arbitrary value from the set" do
14
+ %w[A B C].include?(S["A", "B", "C"].first).should == true
15
+ end
16
+ end
17
+
18
+ it "returns nil if only member of set is nil" do
19
+ S[nil].first.should be(nil)
20
+ end
21
+
22
+ it "returns the first item yielded by #each" do
23
+ 10.times do
24
+ set = S.new((rand(10)+1).times.collect { rand(10000 )})
25
+ set.each { |item| break item }.should be(set.first)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -6,33 +6,33 @@ describe Hamster do
6
6
  [
7
7
  [["A"], ["A"]],
8
8
  [%w[A B C], %w[A B C]],
9
- [["A", Hamster.set("B"), "C"], %w[A B C]],
10
- [[Hamster.set("A"), Hamster.set("B"), Hamster.set("C")], %w[A B C]],
9
+ [["A", S["B"], "C"], %w[A B C]],
10
+ [[S["A"], S["B"], S["C"]], %w[A B C]],
11
11
  ].each do |values, expected|
12
12
  describe "on #{values}" do
13
- let(:set) { Hamster.set(*values) }
13
+ let(:set) { S[*values] }
14
14
 
15
15
  it "preserves the original" do
16
16
  set.flatten
17
- set.should eql(Hamster.set(*values))
17
+ set.should eql(S[*values])
18
18
  end
19
19
 
20
20
  it "returns the inlined values" do
21
- set.flatten.should eql(Hamster.set(*expected))
21
+ set.flatten.should eql(S[*expected])
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
26
  context "on an empty set" do
27
27
  it "returns an empty set" do
28
- Hamster.set.flatten.should equal(Hamster.set)
28
+ S.empty.flatten.should equal(S.empty)
29
29
  end
30
30
  end
31
31
 
32
32
  context "on a set with multiple levels of nesting" do
33
33
  it "inlines lower levels of nesting" do
34
- set = Hamster.set(Hamster.set(Hamster.set(1)), Hamster.set(Hamster.set(2)))
35
- set.flatten.should eql(Hamster.set(1, 2))
34
+ set = S[S[S[1]], S[S[2]]]
35
+ set.flatten.should eql(S[1, 2])
36
36
  end
37
37
  end
38
38
 
@@ -40,7 +40,7 @@ describe Hamster do
40
40
  it "returns an instance of the subclass" do
41
41
  subclass = Class.new(Hamster::Set)
42
42
  subclass.new.flatten.class.should be(subclass)
43
- subclass.new([Hamster.set(1), Hamster.set(2)]).flatten.class.should be(subclass)
43
+ subclass.new([S[1], S[2]]).flatten.class.should be(subclass)
44
44
  end
45
45
  end
46
46
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- let(:set) { Hamster.set(*values) }
5
+ let(:set) { S[*values] }
6
6
 
7
7
  describe "#grep" do
8
8
  let(:grep) { set.grep(String, &block) }
@@ -7,15 +7,15 @@ describe Hamster::Set do
7
7
  context "with a block" do
8
8
  [
9
9
  [[], []],
10
- [[1], [true => Hamster.set(1)]],
11
- [[1, 2, 3, 4], [true => Hamster.set(3, 1), false => Hamster.set(4, 2)]],
10
+ [[1], [true => S[1]]],
11
+ [[1, 2, 3, 4], [true => S[3, 1], false => S[4, 2]]],
12
12
  ].each do |values, expected|
13
13
  context "on #{values.inspect}" do
14
- let(:set) { Hamster.set(*values) }
14
+ let(:set) { S[*values] }
15
15
 
16
16
  it "returns #{expected.inspect}" do
17
- set.send(method, &:odd?).should eql(Hamster.hash(*expected))
18
- set.should eql(Hamster::Set.new(values)) # make sure it hasn't changed
17
+ set.send(method, &:odd?).should eql(H[*expected])
18
+ set.should eql(S.new(values)) # make sure it hasn't changed
19
19
  end
20
20
  end
21
21
  end
@@ -24,15 +24,15 @@ describe Hamster::Set do
24
24
  context "without a block" do
25
25
  [
26
26
  [[], []],
27
- [[1], [1 => Hamster.set(1)]],
28
- [[1, 2, 3, 4], [1 => Hamster.set(1), 2 => Hamster.set(2), 3 => Hamster.set(3), 4 => Hamster.set(4)]],
27
+ [[1], [1 => S[1]]],
28
+ [[1, 2, 3, 4], [1 => S[1], 2 => S[2], 3 => S[3], 4 => S[4]]],
29
29
  ].each do |values, expected|
30
30
  context "on #{values.inspect}" do
31
- let(:set) { Hamster.set(*values) }
31
+ let(:set) { S[*values] }
32
32
 
33
33
  it "returns #{expected.inspect}" do
34
- set.group_by.should eql(Hamster.hash(*expected))
35
- set.should eql(Hamster::Set.new(values)) # make sure it hasn't changed
34
+ set.group_by.should eql(H[*expected])
35
+ set.should eql(S.new(values)) # make sure it hasn't changed
36
36
  end
37
37
  end
38
38
  end
@@ -40,12 +40,12 @@ describe Hamster::Set do
40
40
 
41
41
  context "on an empty set" do
42
42
  it "returns an empty hash" do
43
- Hamster.set.group_by { |x| x }.should eql(Hamster.hash)
43
+ S.empty.group_by { |x| x }.should eql(H.empty)
44
44
  end
45
45
  end
46
46
 
47
47
  it "returns a hash without default proc" do
48
- Hamster.set(1,2,3).group_by { |x| x }.default_proc.should be_nil
48
+ S[1,2,3].group_by { |x| x }.default_proc.should be_nil
49
49
  end
50
50
 
51
51
  context "from a subclass" do
@@ -5,7 +5,7 @@ describe Hamster::Set do
5
5
  describe "#hash" do
6
6
  context "on an empty set" do
7
7
  it "returns 0" do
8
- Hamster.set.hash.should == 0
8
+ S.empty.hash.should == 0
9
9
  end
10
10
  end
11
11
 
@@ -13,11 +13,11 @@ describe Hamster::Set do
13
13
  item1 = DeterministicHash.new('a', 121)
14
14
  item2 = DeterministicHash.new('b', 474)
15
15
  item3 = DeterministicHash.new('c', 121)
16
- Hamster.set.add(item1).add(item2).add(item3).hash.should == Hamster.set.add(item3).add(item2).add(item1).hash
16
+ S.empty.add(item1).add(item2).add(item3).hash.should == S.empty.add(item3).add(item2).add(item1).hash
17
17
  end
18
18
 
19
19
  it "values are sufficiently distributed" do
20
- (1..4000).each_slice(4).map { |a, b, c, d| Hamster.set(a, b, c, d).hash }.uniq.size.should == 1000
20
+ (1..4000).each_slice(4).map { |a, b, c, d| S[a, b, c, d].hash }.uniq.size.should == 1000
21
21
  end
22
22
  end
23
23
  end
@@ -3,9 +3,9 @@ require "hamster/set"
3
3
  require 'set'
4
4
 
5
5
  describe Hamster::Set do
6
- [:include?, :member?, :contains?, :elem?].each do |method|
6
+ [:include?, :member?].each do |method|
7
7
  describe "##{method}" do
8
- let(:set) { Hamster.set("A", "B", "C", 2.0, nil) }
8
+ let(:set) { S["A", "B", "C", 2.0, nil] }
9
9
 
10
10
  ["A", "B", "C", 2.0, nil].each do |value|
11
11
  it "returns true for an existing value (#{value.inspect})" do
@@ -18,17 +18,17 @@ describe Hamster::Set do
18
18
  end
19
19
 
20
20
  it "returns true even if existing value is nil" do
21
- Hamster.set(nil).include?(nil).should == true
21
+ S[nil].include?(nil).should == true
22
22
  end
23
23
 
24
24
  it "returns true even if existing value is false" do
25
- Hamster.set(false).include?(false).should == true
25
+ S[false].include?(false).should == true
26
26
  end
27
27
 
28
28
  it "returns false for a mutable item which is mutated after adding" do
29
29
  item = ['mutable']
30
- item = [rand(1000000)] while (item.hash & 31 == [item[0], 'HOSED!'].hash & 31)
31
- set = Hamster::Set[item]
30
+ item = [rand(1000000)] while (item.hash.abs & 31 == [item[0], 'HOSED!'].hash.abs & 31)
31
+ set = S[item]
32
32
  item.push('HOSED!')
33
33
  set.include?(item).should == false
34
34
  end
@@ -38,10 +38,10 @@ describe Hamster::Set do
38
38
  end
39
39
 
40
40
  it "returns the right answers after a lot of addings and removings" do
41
- array, set, rb_set = [], Hamster::Set.new, Set.new
41
+ array, set, rb_set = [], S.new, ::Set.new
42
42
 
43
43
  1000.times do
44
- if rand(1) == 0
44
+ if rand(2) == 0
45
45
  array << (item = rand(10000))
46
46
  rb_set.add(item)
47
47
  set = set.add(item)
@@ -8,7 +8,7 @@ describe Hamster::Set do
8
8
  [["A"], 'Hamster::Set["A"]'],
9
9
  ].each do |values, expected|
10
10
  describe "on #{values.inspect}" do
11
- let(:set) { Hamster.set(*values) }
11
+ let(:set) { S[*values] }
12
12
 
13
13
  it "returns #{expected.inspect}" do
14
14
  set.inspect.should == expected
@@ -21,7 +21,7 @@ describe Hamster::Set do
21
21
  end
22
22
 
23
23
  describe 'on ["A", "B", "C"]' do
24
- let(:set) { Hamster.set("A", "B", "C") }
24
+ let(:set) { S["A", "B", "C"] }
25
25
 
26
26
  it "returns a programmer-readable representation of the set contents" do
27
27
  set.inspect.should match(/^Hamster::Set\["[A-C]", "[A-C]", "[A-C]"\]$/)
@@ -18,7 +18,7 @@ describe Hamster::Set do
18
18
  ].each do |a, b, expected|
19
19
  describe "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.set(*a).intersect?(Hamster.set(*b)).should be(expected)
21
+ S[*a].intersect?(S[*b]).should be(expected)
22
22
  end
23
23
  end
24
24
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/set"
3
3
 
4
4
  describe Hamster::Set do
5
- [:intersection, :intersect, :&].each do |method|
5
+ [:intersection, :&].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], [], []],
@@ -12,30 +12,30 @@ describe Hamster::Set do
12
12
  [%w[A B C], %w[A C], %w[A C]],
13
13
  ].each do |a, b, expected|
14
14
  context "for #{a.inspect} and #{b.inspect}" do
15
- let(:set_a) { Hamster.set(*a) }
16
- let(:set_b) { Hamster.set(*b) }
15
+ let(:set_a) { S[*a] }
16
+ let(:set_b) { S[*b] }
17
17
 
18
18
  it "returns #{expected.inspect}, without changing the original Sets" do
19
- set_a.send(method, set_b).should eql(Hamster.set(*expected))
20
- set_a.should eql(Hamster::Set.new(a))
21
- set_b.should eql(Hamster::Set.new(b))
19
+ set_a.send(method, set_b).should eql(S[*expected])
20
+ set_a.should eql(S.new(a))
21
+ set_b.should eql(S.new(b))
22
22
  end
23
23
  end
24
24
 
25
25
  context "for #{b.inspect} and #{a.inspect}" do
26
- let(:set_a) { Hamster.set(*a) }
27
- let(:set_b) { Hamster.set(*b) }
26
+ let(:set_a) { S[*a] }
27
+ let(:set_b) { S[*b] }
28
28
 
29
29
  it "returns #{expected.inspect}, without changing the original Sets" do
30
- set_b.send(method, set_a).should eql(Hamster.set(*expected))
31
- set_a.should eql(Hamster::Set.new(a))
32
- set_b.should eql(Hamster::Set.new(b))
30
+ set_b.send(method, set_a).should eql(S[*expected])
31
+ set_a.should eql(S.new(a))
32
+ set_b.should eql(S.new(b))
33
33
  end
34
34
  end
35
35
 
36
36
  context "when passed a Ruby Array" do
37
37
  it "returns the expected Set" do
38
- Hamster.set(*a).send(method, b.freeze).should eql(Hamster.set(*expected))
38
+ S[*a].send(method, b.freeze).should eql(S[*expected])
39
39
  end
40
40
  end
41
41
  end
@@ -44,7 +44,7 @@ describe Hamster::Set do
44
44
  50.times do
45
45
  array1 = rand(100).times.map { rand(1000000).to_s(16) }
46
46
  array2 = rand(100).times.map { rand(1000000).to_s(16) }
47
- result = Hamster::Set.new(array1).send(method, Hamster::Set.new(array2))
47
+ result = S.new(array1).send(method, S.new(array2))
48
48
  result.to_a.sort.should eql((array1 & array2).sort)
49
49
  end
50
50
  end