hamster 1.0.0 → 1.0.1.pre.rc.1

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 (509) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hamster.rb +2 -3
  3. data/lib/hamster/core_ext.rb +1 -0
  4. data/lib/hamster/core_ext/enumerable.rb +17 -17
  5. data/lib/hamster/core_ext/enumerator.rb +16 -0
  6. data/lib/hamster/core_ext/io.rb +17 -15
  7. data/lib/hamster/enumerable.rb +107 -123
  8. data/lib/hamster/experimental/mutable_queue.rb +6 -2
  9. data/lib/hamster/experimental/mutable_set.rb +3 -1
  10. data/lib/hamster/experimental/mutable_stack.rb +30 -0
  11. data/lib/hamster/hash.rb +95 -713
  12. data/lib/hamster/immutable.rb +0 -4
  13. data/lib/hamster/list.rb +242 -1062
  14. data/lib/hamster/mutable_hash.rb +3 -1
  15. data/lib/hamster/queue.rb +87 -0
  16. data/lib/hamster/read_copy_update.rb +1 -2
  17. data/lib/hamster/set.rb +73 -478
  18. data/lib/hamster/sorter.rb +25 -0
  19. data/lib/hamster/stack.rb +75 -0
  20. data/lib/hamster/trie.rb +48 -199
  21. data/lib/hamster/tuple.rb +39 -0
  22. data/lib/hamster/undefined.rb +3 -1
  23. data/lib/hamster/vector.rb +72 -1326
  24. data/lib/hamster/version.rb +1 -1
  25. data/spec/hamster/core_ext/array_spec.rb +20 -0
  26. data/spec/{lib/hamster → hamster}/core_ext/enumerable_spec.rb +0 -5
  27. data/spec/hamster/core_ext/enumerator_spec.rb +19 -0
  28. data/spec/{lib/hamster → hamster}/core_ext/io_spec.rb +0 -0
  29. data/spec/hamster/experimental/mutable_set/add_qm_spec.rb +47 -0
  30. data/spec/hamster/experimental/mutable_set/add_spec.rb +51 -0
  31. data/spec/hamster/experimental/mutable_set/delete_qm_spec.rb +47 -0
  32. data/spec/hamster/experimental/mutable_set/delete_spec.rb +47 -0
  33. data/spec/hamster/experimental/mutable_stack/pop_spec.rb +41 -0
  34. data/spec/hamster/experimental/mutable_stack/push_spec.rb +41 -0
  35. data/spec/hamster/hash/all_spec.rb +59 -0
  36. data/spec/hamster/hash/any_spec.rb +67 -0
  37. data/spec/hamster/hash/clear_spec.rb +36 -0
  38. data/spec/hamster/hash/construction_spec.rb +35 -0
  39. data/spec/{lib/hamster → hamster}/hash/copying_spec.rb +12 -3
  40. data/spec/hamster/hash/delete_spec.rb +47 -0
  41. data/spec/hamster/hash/each_spec.rb +41 -0
  42. data/spec/hamster/hash/empty_spec.rb +27 -0
  43. data/spec/hamster/hash/eql_spec.rb +62 -0
  44. data/spec/hamster/hash/except_spec.rb +31 -0
  45. data/spec/hamster/hash/fetch_spec.rb +95 -0
  46. data/spec/hamster/hash/filter_spec.rb +63 -0
  47. data/spec/hamster/hash/find_spec.rb +58 -0
  48. data/spec/hamster/hash/get_spec.rb +55 -0
  49. data/spec/hamster/hash/has_key_spec.rb +35 -0
  50. data/spec/hamster/hash/hash_spec.rb +52 -0
  51. data/spec/{lib/hamster → hamster}/hash/immutable_spec.rb +3 -0
  52. data/spec/hamster/hash/inspect_spec.rb +32 -0
  53. data/spec/hamster/hash/keys_spec.rb +21 -0
  54. data/spec/hamster/hash/map_spec.rb +64 -0
  55. data/spec/{lib/hamster → hamster}/hash/marshal_spec.rb +3 -3
  56. data/spec/hamster/hash/merge_spec.rb +36 -0
  57. data/spec/{lib/hamster → hamster}/hash/none_spec.rb +14 -12
  58. data/spec/hamster/hash/put_spec.rb +65 -0
  59. data/spec/hamster/hash/reduce_spec.rb +60 -0
  60. data/spec/hamster/hash/remove_spec.rb +63 -0
  61. data/spec/{lib/hamster → hamster}/hash/size_spec.rb +2 -2
  62. data/spec/hamster/hash/slice_spec.rb +26 -0
  63. data/spec/hamster/hash/uniq_spec.rb +23 -0
  64. data/spec/hamster/hash/values_spec.rb +34 -0
  65. data/spec/{lib/hamster → hamster}/immutable/copying_spec.rb +8 -1
  66. data/spec/{lib/hamster → hamster}/immutable/immutable_spec.rb +14 -1
  67. data/spec/{lib/hamster → hamster}/immutable/memoize_spec.rb +3 -2
  68. data/spec/{lib/hamster → hamster}/immutable/new_spec.rb +0 -0
  69. data/spec/{lib/hamster → hamster}/immutable/transform_spec.rb +0 -0
  70. data/spec/{lib/hamster → hamster}/immutable/transform_unless_spec.rb +0 -0
  71. data/spec/hamster/list/add_spec.rb +16 -0
  72. data/spec/hamster/list/all_spec.rb +111 -0
  73. data/spec/hamster/list/any_spec.rb +79 -0
  74. data/spec/{lib/hamster → hamster}/list/append_spec.rb +22 -11
  75. data/spec/hamster/list/at_spec.rb +49 -0
  76. data/spec/hamster/list/break_spec.rb +85 -0
  77. data/spec/{lib/hamster → hamster}/list/cadr_spec.rb +17 -6
  78. data/spec/{lib/hamster → hamster}/list/chunk_spec.rb +17 -6
  79. data/spec/{lib/hamster → hamster}/list/clear_spec.rb +16 -5
  80. data/spec/hamster/list/combinations_spec.rb +51 -0
  81. data/spec/{lib/hamster → hamster}/list/compact_spec.rb +17 -6
  82. data/spec/hamster/list/cons_spec.rb +41 -0
  83. data/spec/hamster/list/construction_spec.rb +166 -0
  84. data/spec/{lib/hamster → hamster}/list/copying_spec.rb +16 -4
  85. data/spec/hamster/list/count_spec.rb +66 -0
  86. data/spec/hamster/list/cycle_spec.rb +45 -0
  87. data/spec/{lib/hamster → hamster}/list/drop_spec.rb +17 -6
  88. data/spec/hamster/list/drop_while_spec.rb +59 -0
  89. data/spec/hamster/list/each_slice_spec.rb +80 -0
  90. data/spec/hamster/list/each_spec.rb +72 -0
  91. data/spec/hamster/list/each_with_index_spec.rb +42 -0
  92. data/spec/hamster/list/elem_index_spec.rb +58 -0
  93. data/spec/hamster/list/elem_indices_spec.rb +45 -0
  94. data/spec/hamster/list/empty_spec.rb +47 -0
  95. data/spec/hamster/list/eql_spec.rb +78 -0
  96. data/spec/hamster/list/filter_spec.rb +70 -0
  97. data/spec/{lib/hamster → hamster}/list/find_all_spec.rb +2 -3
  98. data/spec/{lib/hamster → hamster}/list/find_index_spec.rb +27 -5
  99. data/spec/hamster/list/find_indices_spec.rb +45 -0
  100. data/spec/{lib/hamster → hamster}/list/find_spec.rb +33 -11
  101. data/spec/{lib/hamster → hamster}/list/flat_map_spec.rb +0 -0
  102. data/spec/{lib/hamster → hamster}/list/flatten_spec.rb +17 -6
  103. data/spec/{lib/hamster → hamster}/list/grep_spec.rb +33 -10
  104. data/spec/{lib/hamster → hamster}/list/group_by_spec.rb +44 -9
  105. data/spec/{lib/hamster → hamster}/list/hash_spec.rb +12 -4
  106. data/spec/{lib/hamster → hamster}/list/head_spec.rb +18 -3
  107. data/spec/{lib/hamster → hamster}/list/include_spec.rb +27 -6
  108. data/spec/{lib/hamster → hamster}/list/init_spec.rb +17 -6
  109. data/spec/hamster/list/inits_spec.rb +42 -0
  110. data/spec/hamster/list/inspect_spec.rb +43 -0
  111. data/spec/{lib/hamster → hamster}/list/intersperse_spec.rb +17 -6
  112. data/spec/hamster/list/join_spec.rb +81 -0
  113. data/spec/hamster/list/last_spec.rb +44 -0
  114. data/spec/{lib/hamster → hamster}/list/map_spec.rb +35 -12
  115. data/spec/hamster/list/maximum_spec.rb +77 -0
  116. data/spec/{lib/hamster → hamster}/list/merge_by_spec.rb +32 -5
  117. data/spec/{lib/hamster → hamster}/list/merge_spec.rb +20 -1
  118. data/spec/hamster/list/minimum_spec.rb +77 -0
  119. data/spec/{lib/hamster → hamster}/list/none_spec.rb +39 -12
  120. data/spec/{lib/hamster → hamster}/list/one_spec.rb +38 -13
  121. data/spec/hamster/list/partition_spec.rb +75 -0
  122. data/spec/{lib/hamster → hamster}/list/pop_spec.rb +1 -1
  123. data/spec/hamster/list/product_spec.rb +44 -0
  124. data/spec/hamster/list/reduce_spec.rb +73 -0
  125. data/spec/{lib/hamster/list/reject_spec.rb → hamster/list/remove_spec.rb} +35 -11
  126. data/spec/{lib/hamster → hamster}/list/reverse_spec.rb +25 -8
  127. data/spec/{lib/hamster → hamster}/list/select_spec.rb +2 -3
  128. data/spec/{lib/hamster → hamster}/list/size_spec.rb +26 -5
  129. data/spec/hamster/list/slice_spec.rb +50 -0
  130. data/spec/{lib/hamster → hamster}/list/sorting_spec.rb +34 -11
  131. data/spec/hamster/list/span_spec.rb +86 -0
  132. data/spec/{lib/hamster → hamster}/list/split_at_spec.rb +23 -14
  133. data/spec/hamster/list/sum_spec.rb +44 -0
  134. data/spec/hamster/list/tail_spec.rb +48 -0
  135. data/spec/hamster/list/tails_spec.rb +42 -0
  136. data/spec/{lib/hamster → hamster}/list/take_spec.rb +17 -6
  137. data/spec/{lib/hamster → hamster}/list/take_while_spec.rb +18 -11
  138. data/spec/hamster/list/to_a_spec.rb +54 -0
  139. data/spec/{lib/hamster → hamster}/list/to_ary_spec.rb +4 -1
  140. data/spec/{lib/hamster → hamster}/list/to_list_spec.rb +16 -4
  141. data/spec/hamster/list/to_set_spec.rb +33 -0
  142. data/spec/{lib/hamster → hamster}/list/union_spec.rb +23 -6
  143. data/spec/hamster/list/uniq_spec.rb +45 -0
  144. data/spec/{lib/hamster → hamster}/list/zip_spec.rb +9 -2
  145. data/spec/hamster/queue/clear_spec.rb +36 -0
  146. data/spec/hamster/queue/construction_spec.rb +43 -0
  147. data/spec/hamster/queue/dequeue_spec.rb +40 -0
  148. data/spec/hamster/queue/empty_spec.rb +47 -0
  149. data/spec/{lib/hamster/deque → hamster/queue}/enqueue_spec.rb +21 -8
  150. data/spec/hamster/queue/head_spec.rb +35 -0
  151. data/spec/hamster/queue/inspect_spec.rb +31 -0
  152. data/spec/{lib/hamster/deque → hamster/queue}/size_spec.rb +20 -5
  153. data/spec/hamster/queue/to_a_spec.rb +42 -0
  154. data/spec/{lib/hamster/deque → hamster/queue}/to_ary_spec.rb +6 -6
  155. data/spec/hamster/queue/to_list_spec.rb +44 -0
  156. data/spec/hamster/set/add_spec.rb +51 -0
  157. data/spec/hamster/set/all_spec.rb +67 -0
  158. data/spec/hamster/set/any_spec.rb +67 -0
  159. data/spec/hamster/set/clear_spec.rb +36 -0
  160. data/spec/{lib/hamster → hamster}/set/compact_spec.rb +16 -5
  161. data/spec/{lib/hamster → hamster}/set/construction_spec.rb +17 -5
  162. data/spec/{lib/hamster → hamster}/set/copying_spec.rb +12 -3
  163. data/spec/{lib/hamster → hamster}/set/count_spec.rb +28 -11
  164. data/spec/hamster/set/delete_spec.rb +47 -0
  165. data/spec/{lib/hamster/sorted_set → hamster/set}/difference_spec.rb +21 -7
  166. data/spec/{lib/hamster/set/reverse_each_spec.rb → hamster/set/each_spec.rb} +7 -8
  167. data/spec/hamster/set/empty_spec.rb +35 -0
  168. data/spec/{lib/hamster → hamster}/set/eqeq_spec.rb +0 -0
  169. data/spec/{lib/hamster → hamster}/set/eql_spec.rb +1 -7
  170. data/spec/{lib/hamster/sorted_set → hamster/set}/exclusion_spec.rb +20 -5
  171. data/spec/hamster/set/filter_spec.rb +79 -0
  172. data/spec/{lib/hamster → hamster}/set/find_spec.rb +25 -8
  173. data/spec/hamster/set/flatten_spec.rb +49 -0
  174. data/spec/hamster/set/foreach_spec.rb +39 -0
  175. data/spec/{lib/hamster → hamster}/set/grep_spec.rb +1 -1
  176. data/spec/hamster/set/group_by_spec.rb +65 -0
  177. data/spec/hamster/set/hash_spec.rb +20 -0
  178. data/spec/hamster/set/head_spec.rb +39 -0
  179. data/spec/{lib/hamster → hamster}/set/immutable_spec.rb +4 -1
  180. data/spec/hamster/set/include_spec.rb +35 -0
  181. data/spec/hamster/set/inspect_spec.rb +32 -0
  182. data/spec/hamster/set/intersection_spec.rb +46 -0
  183. data/spec/{lib/hamster/vector → hamster/set}/join_spec.rb +33 -23
  184. data/spec/hamster/set/map_spec.rb +64 -0
  185. data/spec/{lib/hamster → hamster}/set/marshal_spec.rb +9 -4
  186. data/spec/hamster/set/maximum_spec.rb +65 -0
  187. data/spec/hamster/set/minimum_spec.rb +65 -0
  188. data/spec/{lib/hamster → hamster}/set/none_spec.rb +30 -15
  189. data/spec/{lib/hamster → hamster}/set/one_spec.rb +29 -14
  190. data/spec/hamster/set/partition_spec.rb +71 -0
  191. data/spec/{lib/hamster → hamster}/set/product_spec.rb +15 -7
  192. data/spec/hamster/set/reduce_spec.rb +87 -0
  193. data/spec/hamster/set/remove_spec.rb +63 -0
  194. data/spec/{lib/hamster → hamster}/set/size_spec.rb +10 -1
  195. data/spec/{lib/hamster → hamster}/set/sorting_spec.rb +16 -18
  196. data/spec/hamster/set/subset_spec.rb +39 -0
  197. data/spec/{lib/hamster/vector → hamster/set}/sum_spec.rb +18 -4
  198. data/spec/hamster/set/superset_spec.rb +39 -0
  199. data/spec/hamster/set/to_a_spec.rb +42 -0
  200. data/spec/{lib/hamster/vector → hamster/set}/to_list_spec.rb +23 -8
  201. data/spec/{lib/hamster → hamster}/set/to_set_spec.rb +15 -3
  202. data/spec/hamster/set/union_spec.rb +45 -0
  203. data/spec/hamster/set/uniq_spec.rb +23 -0
  204. data/spec/hamster/sorter/immutable_spec.rb +12 -0
  205. data/spec/hamster/stack/clear_spec.rb +36 -0
  206. data/spec/hamster/stack/construction_spec.rb +43 -0
  207. data/spec/hamster/stack/copying_spec.rb +31 -0
  208. data/spec/hamster/stack/empty_spec.rb +31 -0
  209. data/spec/hamster/stack/eql_spec.rb +60 -0
  210. data/spec/hamster/stack/immutable_spec.rb +12 -0
  211. data/spec/hamster/stack/inspect_spec.rb +31 -0
  212. data/spec/hamster/stack/peek_spec.rb +40 -0
  213. data/spec/hamster/stack/pop_spec.rb +41 -0
  214. data/spec/hamster/stack/push_spec.rb +41 -0
  215. data/spec/hamster/stack/size_spec.rb +35 -0
  216. data/spec/hamster/stack/to_a_spec.rb +42 -0
  217. data/spec/hamster/stack/to_ary.rb +37 -0
  218. data/spec/hamster/stack/to_list_spec.rb +33 -0
  219. data/spec/hamster/trie/remove_spec.rb +117 -0
  220. data/spec/hamster/tuple/copying_spec.rb +24 -0
  221. data/spec/hamster/tuple/eql_spec.rb +61 -0
  222. data/spec/hamster/tuple/first_spec.rb +19 -0
  223. data/spec/hamster/tuple/immutable_spec.rb +12 -0
  224. data/spec/hamster/tuple/inspect_spec.rb +19 -0
  225. data/spec/hamster/tuple/last_spec.rb +19 -0
  226. data/spec/hamster/tuple/to_a_spec.rb +38 -0
  227. data/spec/hamster/tuple/to_ary_spec.rb +38 -0
  228. data/spec/hamster/undefined/erase_spec.rb +47 -0
  229. data/spec/hamster/vector/add_spec.rb +48 -0
  230. data/spec/{lib/hamster → hamster}/vector/any_spec.rb +0 -0
  231. data/spec/hamster/vector/clear_spec.rb +35 -0
  232. data/spec/{lib/hamster → hamster}/vector/copying_spec.rb +14 -4
  233. data/spec/hamster/vector/each_spec.rb +45 -0
  234. data/spec/hamster/vector/each_with_index_spec.rb +41 -0
  235. data/spec/hamster/vector/empty_spec.rb +34 -0
  236. data/spec/hamster/vector/eql_spec.rb +64 -0
  237. data/spec/hamster/vector/filter_spec.rb +62 -0
  238. data/spec/hamster/vector/first_spec.rb +35 -0
  239. data/spec/hamster/vector/get_spec.rb +80 -0
  240. data/spec/{lib/hamster → hamster}/vector/include_spec.rb +17 -4
  241. data/spec/hamster/vector/inspect_spec.rb +33 -0
  242. data/spec/{lib/hamster → hamster}/vector/last_spec.rb +3 -12
  243. data/spec/{lib/hamster → hamster}/vector/length_spec.rb +3 -12
  244. data/spec/hamster/vector/map_spec.rb +63 -0
  245. data/spec/{lib/hamster → hamster}/vector/reduce_spec.rb +47 -16
  246. data/spec/hamster/vector/set_spec.rb +113 -0
  247. data/spec/{lib/hamster → hamster}/vector/to_a_spec.rb +12 -11
  248. data/spec/{lib/hamster → hamster}/vector/to_ary_spec.rb +0 -0
  249. data/spec/lib/hamster/vector/cons_spec.rb +48 -0
  250. data/spec/lib/hamster/vector/exist_spec.rb +70 -0
  251. data/spec/lib/hamster/vector/exists_spec.rb +70 -0
  252. data/spec/lib/hamster/vector/ltlt_spec.rb +2 -20
  253. data/spec/spec_helper.rb +5 -36
  254. metadata +510 -723
  255. data/lib/hamster/deque.rb +0 -252
  256. data/lib/hamster/nested.rb +0 -36
  257. data/lib/hamster/sorted_set.rb +0 -1397
  258. data/spec/lib/hamster/core_ext/array_spec.rb +0 -14
  259. data/spec/lib/hamster/deque/clear_spec.rb +0 -34
  260. data/spec/lib/hamster/deque/construction_spec.rb +0 -30
  261. data/spec/lib/hamster/deque/copying_spec.rb +0 -20
  262. data/spec/lib/hamster/deque/dequeue_spec.rb +0 -35
  263. data/spec/lib/hamster/deque/empty_spec.rb +0 -40
  264. data/spec/lib/hamster/deque/first_spec.rb +0 -18
  265. data/spec/lib/hamster/deque/inspect_spec.rb +0 -24
  266. data/spec/lib/hamster/deque/last_spec.rb +0 -18
  267. data/spec/lib/hamster/deque/marshal_spec.rb +0 -34
  268. data/spec/lib/hamster/deque/new_spec.rb +0 -44
  269. data/spec/lib/hamster/deque/pop_spec.rb +0 -33
  270. data/spec/lib/hamster/deque/pretty_print_spec.rb +0 -24
  271. data/spec/lib/hamster/deque/random_modification_spec.rb +0 -34
  272. data/spec/lib/hamster/deque/to_a_spec.rb +0 -27
  273. data/spec/lib/hamster/deque/to_list_spec.rb +0 -26
  274. data/spec/lib/hamster/deque/unshift_spec.rb +0 -26
  275. data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +0 -39
  276. data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +0 -37
  277. data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +0 -38
  278. data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +0 -37
  279. data/spec/lib/hamster/hash/all_spec.rb +0 -54
  280. data/spec/lib/hamster/hash/any_spec.rb +0 -54
  281. data/spec/lib/hamster/hash/assoc_spec.rb +0 -52
  282. data/spec/lib/hamster/hash/clear_spec.rb +0 -43
  283. data/spec/lib/hamster/hash/construction_spec.rb +0 -39
  284. data/spec/lib/hamster/hash/default_proc_spec.rb +0 -73
  285. data/spec/lib/hamster/hash/delete_spec.rb +0 -40
  286. data/spec/lib/hamster/hash/each_spec.rb +0 -78
  287. data/spec/lib/hamster/hash/each_with_index_spec.rb +0 -30
  288. data/spec/lib/hamster/hash/empty_spec.rb +0 -44
  289. data/spec/lib/hamster/hash/eql_spec.rb +0 -70
  290. data/spec/lib/hamster/hash/except_spec.rb +0 -43
  291. data/spec/lib/hamster/hash/fetch_spec.rb +0 -58
  292. data/spec/lib/hamster/hash/find_spec.rb +0 -44
  293. data/spec/lib/hamster/hash/flat_map_spec.rb +0 -36
  294. data/spec/lib/hamster/hash/flatten_spec.rb +0 -99
  295. data/spec/lib/hamster/hash/get_spec.rb +0 -80
  296. data/spec/lib/hamster/hash/has_key_spec.rb +0 -32
  297. data/spec/lib/hamster/hash/has_value_spec.rb +0 -28
  298. data/spec/lib/hamster/hash/hash_spec.rb +0 -30
  299. data/spec/lib/hamster/hash/inspect_spec.rb +0 -31
  300. data/spec/lib/hamster/hash/invert_spec.rb +0 -31
  301. data/spec/lib/hamster/hash/key_spec.rb +0 -28
  302. data/spec/lib/hamster/hash/keys_spec.rb +0 -17
  303. data/spec/lib/hamster/hash/map_spec.rb +0 -46
  304. data/spec/lib/hamster/hash/merge_spec.rb +0 -83
  305. data/spec/lib/hamster/hash/min_max_spec.rb +0 -46
  306. data/spec/lib/hamster/hash/new_spec.rb +0 -71
  307. data/spec/lib/hamster/hash/partition_spec.rb +0 -36
  308. data/spec/lib/hamster/hash/pretty_print_spec.rb +0 -35
  309. data/spec/lib/hamster/hash/put_spec.rb +0 -103
  310. data/spec/lib/hamster/hash/reduce_spec.rb +0 -36
  311. data/spec/lib/hamster/hash/reject_spec.rb +0 -62
  312. data/spec/lib/hamster/hash/reverse_each_spec.rb +0 -28
  313. data/spec/lib/hamster/hash/sample_spec.rb +0 -14
  314. data/spec/lib/hamster/hash/select_spec.rb +0 -58
  315. data/spec/lib/hamster/hash/slice_spec.rb +0 -45
  316. data/spec/lib/hamster/hash/sort_spec.rb +0 -27
  317. data/spec/lib/hamster/hash/store_spec.rb +0 -76
  318. data/spec/lib/hamster/hash/take_spec.rb +0 -36
  319. data/spec/lib/hamster/hash/to_a_spec.rb +0 -14
  320. data/spec/lib/hamster/hash/to_hash_spec.rb +0 -22
  321. data/spec/lib/hamster/hash/update_in_spec.rb +0 -80
  322. data/spec/lib/hamster/hash/values_at_spec.rb +0 -14
  323. data/spec/lib/hamster/hash/values_spec.rb +0 -25
  324. data/spec/lib/hamster/list/add_spec.rb +0 -26
  325. data/spec/lib/hamster/list/all_spec.rb +0 -58
  326. data/spec/lib/hamster/list/any_spec.rb +0 -50
  327. data/spec/lib/hamster/list/at_spec.rb +0 -30
  328. data/spec/lib/hamster/list/break_spec.rb +0 -70
  329. data/spec/lib/hamster/list/combination_spec.rb +0 -34
  330. data/spec/lib/hamster/list/compare_spec.rb +0 -31
  331. data/spec/lib/hamster/list/cons_spec.rb +0 -26
  332. data/spec/lib/hamster/list/construction_spec.rb +0 -111
  333. data/spec/lib/hamster/list/count_spec.rb +0 -37
  334. data/spec/lib/hamster/list/cycle_spec.rb +0 -29
  335. data/spec/lib/hamster/list/delete_at_spec.rb +0 -19
  336. data/spec/lib/hamster/list/delete_spec.rb +0 -17
  337. data/spec/lib/hamster/list/drop_while_spec.rb +0 -39
  338. data/spec/lib/hamster/list/each_slice_spec.rb +0 -52
  339. data/spec/lib/hamster/list/each_spec.rb +0 -41
  340. data/spec/lib/hamster/list/each_with_index_spec.rb +0 -29
  341. data/spec/lib/hamster/list/empty_spec.rb +0 -24
  342. data/spec/lib/hamster/list/eql_spec.rb +0 -62
  343. data/spec/lib/hamster/list/fill_spec.rb +0 -50
  344. data/spec/lib/hamster/list/index_spec.rb +0 -34
  345. data/spec/lib/hamster/list/indices_spec.rb +0 -62
  346. data/spec/lib/hamster/list/inits_spec.rb +0 -29
  347. data/spec/lib/hamster/list/insert_spec.rb +0 -47
  348. data/spec/lib/hamster/list/inspect_spec.rb +0 -30
  349. data/spec/lib/hamster/list/join_spec.rb +0 -64
  350. data/spec/lib/hamster/list/last_spec.rb +0 -24
  351. data/spec/lib/hamster/list/ltlt_spec.rb +0 -20
  352. data/spec/lib/hamster/list/maximum_spec.rb +0 -40
  353. data/spec/lib/hamster/list/minimum_spec.rb +0 -40
  354. data/spec/lib/hamster/list/multithreading_spec.rb +0 -48
  355. data/spec/lib/hamster/list/partition_spec.rb +0 -116
  356. data/spec/lib/hamster/list/permutation_spec.rb +0 -56
  357. data/spec/lib/hamster/list/product_spec.rb +0 -24
  358. data/spec/lib/hamster/list/reduce_spec.rb +0 -54
  359. data/spec/lib/hamster/list/rotate_spec.rb +0 -37
  360. data/spec/lib/hamster/list/sample_spec.rb +0 -14
  361. data/spec/lib/hamster/list/slice_spec.rb +0 -230
  362. data/spec/lib/hamster/list/span_spec.rb +0 -77
  363. data/spec/lib/hamster/list/subsequences_spec.rb +0 -24
  364. data/spec/lib/hamster/list/sum_spec.rb +0 -24
  365. data/spec/lib/hamster/list/tail_spec.rb +0 -31
  366. data/spec/lib/hamster/list/tails_spec.rb +0 -29
  367. data/spec/lib/hamster/list/to_a_spec.rb +0 -40
  368. data/spec/lib/hamster/list/to_set_spec.rb +0 -19
  369. data/spec/lib/hamster/list/transpose_spec.rb +0 -20
  370. data/spec/lib/hamster/list/uniq_spec.rb +0 -30
  371. data/spec/lib/hamster/nested/construction_spec.rb +0 -44
  372. data/spec/lib/hamster/set/add_spec.rb +0 -76
  373. data/spec/lib/hamster/set/all_spec.rb +0 -52
  374. data/spec/lib/hamster/set/any_spec.rb +0 -52
  375. data/spec/lib/hamster/set/clear_spec.rb +0 -34
  376. data/spec/lib/hamster/set/delete_spec.rb +0 -72
  377. data/spec/lib/hamster/set/difference_spec.rb +0 -50
  378. data/spec/lib/hamster/set/disjoint_spec.rb +0 -26
  379. data/spec/lib/hamster/set/each_spec.rb +0 -46
  380. data/spec/lib/hamster/set/empty_spec.rb +0 -45
  381. data/spec/lib/hamster/set/exclusion_spec.rb +0 -48
  382. data/spec/lib/hamster/set/first_spec.rb +0 -29
  383. data/spec/lib/hamster/set/flatten_spec.rb +0 -47
  384. data/spec/lib/hamster/set/group_by_spec.rb +0 -60
  385. data/spec/lib/hamster/set/hash_spec.rb +0 -23
  386. data/spec/lib/hamster/set/include_spec.rb +0 -61
  387. data/spec/lib/hamster/set/inspect_spec.rb +0 -48
  388. data/spec/lib/hamster/set/intersect_spec.rb +0 -26
  389. data/spec/lib/hamster/set/intersection_spec.rb +0 -53
  390. data/spec/lib/hamster/set/join_spec.rb +0 -65
  391. data/spec/lib/hamster/set/map_spec.rb +0 -60
  392. data/spec/lib/hamster/set/maximum_spec.rb +0 -37
  393. data/spec/lib/hamster/set/minimum_spec.rb +0 -37
  394. data/spec/lib/hamster/set/new_spec.rb +0 -54
  395. data/spec/lib/hamster/set/partition_spec.rb +0 -53
  396. data/spec/lib/hamster/set/reduce_spec.rb +0 -56
  397. data/spec/lib/hamster/set/reject_spec.rb +0 -51
  398. data/spec/lib/hamster/set/sample_spec.rb +0 -14
  399. data/spec/lib/hamster/set/select_spec.rb +0 -74
  400. data/spec/lib/hamster/set/subset_spec.rb +0 -52
  401. data/spec/lib/hamster/set/sum_spec.rb +0 -24
  402. data/spec/lib/hamster/set/superset_spec.rb +0 -52
  403. data/spec/lib/hamster/set/to_a_spec.rb +0 -31
  404. data/spec/lib/hamster/set/to_list_spec.rb +0 -37
  405. data/spec/lib/hamster/set/union_spec.rb +0 -64
  406. data/spec/lib/hamster/sorted_set/above_spec.rb +0 -52
  407. data/spec/lib/hamster/sorted_set/add_spec.rb +0 -63
  408. data/spec/lib/hamster/sorted_set/at_spec.rb +0 -25
  409. data/spec/lib/hamster/sorted_set/below_spec.rb +0 -52
  410. data/spec/lib/hamster/sorted_set/between_spec.rb +0 -52
  411. data/spec/lib/hamster/sorted_set/clear_spec.rb +0 -44
  412. data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
  413. data/spec/lib/hamster/sorted_set/delete_at_spec.rb +0 -19
  414. data/spec/lib/hamster/sorted_set/delete_spec.rb +0 -90
  415. data/spec/lib/hamster/sorted_set/disjoint_spec.rb +0 -26
  416. data/spec/lib/hamster/sorted_set/drop_spec.rb +0 -56
  417. data/spec/lib/hamster/sorted_set/drop_while_spec.rb +0 -35
  418. data/spec/lib/hamster/sorted_set/each_spec.rb +0 -29
  419. data/spec/lib/hamster/sorted_set/empty_spec.rb +0 -35
  420. data/spec/lib/hamster/sorted_set/eql_spec.rb +0 -121
  421. data/spec/lib/hamster/sorted_set/fetch_spec.rb +0 -65
  422. data/spec/lib/hamster/sorted_set/find_index_spec.rb +0 -41
  423. data/spec/lib/hamster/sorted_set/first_spec.rb +0 -19
  424. data/spec/lib/hamster/sorted_set/from_spec.rb +0 -52
  425. data/spec/lib/hamster/sorted_set/group_by_spec.rb +0 -58
  426. data/spec/lib/hamster/sorted_set/include_spec.rb +0 -24
  427. data/spec/lib/hamster/sorted_set/inspect_spec.rb +0 -38
  428. data/spec/lib/hamster/sorted_set/intersect_spec.rb +0 -26
  429. data/spec/lib/hamster/sorted_set/intersection_spec.rb +0 -29
  430. data/spec/lib/hamster/sorted_set/last_spec.rb +0 -37
  431. data/spec/lib/hamster/sorted_set/map_spec.rb +0 -36
  432. data/spec/lib/hamster/sorted_set/marshal_spec.rb +0 -37
  433. data/spec/lib/hamster/sorted_set/maximum_spec.rb +0 -37
  434. data/spec/lib/hamster/sorted_set/minimum_spec.rb +0 -20
  435. data/spec/lib/hamster/sorted_set/new_spec.rb +0 -52
  436. data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +0 -29
  437. data/spec/lib/hamster/sorted_set/sample_spec.rb +0 -14
  438. data/spec/lib/hamster/sorted_set/select_spec.rb +0 -62
  439. data/spec/lib/hamster/sorted_set/size_spec.rb +0 -18
  440. data/spec/lib/hamster/sorted_set/slice_spec.rb +0 -257
  441. data/spec/lib/hamster/sorted_set/sorting_spec.rb +0 -45
  442. data/spec/lib/hamster/sorted_set/subset_spec.rb +0 -48
  443. data/spec/lib/hamster/sorted_set/superset_spec.rb +0 -48
  444. data/spec/lib/hamster/sorted_set/take_spec.rb +0 -55
  445. data/spec/lib/hamster/sorted_set/take_while_spec.rb +0 -34
  446. data/spec/lib/hamster/sorted_set/to_set_spec.rb +0 -19
  447. data/spec/lib/hamster/sorted_set/union_spec.rb +0 -28
  448. data/spec/lib/hamster/sorted_set/up_to_spec.rb +0 -52
  449. data/spec/lib/hamster/sorted_set/values_at_spec.rb +0 -34
  450. data/spec/lib/hamster/vector/add_spec.rb +0 -68
  451. data/spec/lib/hamster/vector/assoc_spec.rb +0 -36
  452. data/spec/lib/hamster/vector/bsearch_spec.rb +0 -58
  453. data/spec/lib/hamster/vector/clear_spec.rb +0 -34
  454. data/spec/lib/hamster/vector/combination_spec.rb +0 -82
  455. data/spec/lib/hamster/vector/compact_spec.rb +0 -30
  456. data/spec/lib/hamster/vector/compare_spec.rb +0 -32
  457. data/spec/lib/hamster/vector/concat_spec.rb +0 -35
  458. data/spec/lib/hamster/vector/count_spec.rb +0 -18
  459. data/spec/lib/hamster/vector/delete_at_spec.rb +0 -54
  460. data/spec/lib/hamster/vector/delete_spec.rb +0 -31
  461. data/spec/lib/hamster/vector/drop_spec.rb +0 -42
  462. data/spec/lib/hamster/vector/drop_while_spec.rb +0 -55
  463. data/spec/lib/hamster/vector/each_index_spec.rb +0 -41
  464. data/spec/lib/hamster/vector/each_spec.rb +0 -45
  465. data/spec/lib/hamster/vector/each_with_index_spec.rb +0 -40
  466. data/spec/lib/hamster/vector/empty_spec.rb +0 -42
  467. data/spec/lib/hamster/vector/eql_spec.rb +0 -77
  468. data/spec/lib/hamster/vector/fetch_spec.rb +0 -65
  469. data/spec/lib/hamster/vector/fill_spec.rb +0 -89
  470. data/spec/lib/hamster/vector/first_spec.rb +0 -19
  471. data/spec/lib/hamster/vector/flat_map_spec.rb +0 -51
  472. data/spec/lib/hamster/vector/flatten_spec.rb +0 -44
  473. data/spec/lib/hamster/vector/get_spec.rb +0 -75
  474. data/spec/lib/hamster/vector/group_by_spec.rb +0 -58
  475. data/spec/lib/hamster/vector/insert_spec.rb +0 -69
  476. data/spec/lib/hamster/vector/inspect_spec.rb +0 -50
  477. data/spec/lib/hamster/vector/map_spec.rb +0 -52
  478. data/spec/lib/hamster/vector/marshal_spec.rb +0 -32
  479. data/spec/lib/hamster/vector/maximum_spec.rb +0 -34
  480. data/spec/lib/hamster/vector/minimum_spec.rb +0 -34
  481. data/spec/lib/hamster/vector/multiply_spec.rb +0 -48
  482. data/spec/lib/hamster/vector/new_spec.rb +0 -51
  483. data/spec/lib/hamster/vector/partition_spec.rb +0 -53
  484. data/spec/lib/hamster/vector/permutation_spec.rb +0 -92
  485. data/spec/lib/hamster/vector/pop_spec.rb +0 -27
  486. data/spec/lib/hamster/vector/product_spec.rb +0 -71
  487. data/spec/lib/hamster/vector/reject_spec.rb +0 -44
  488. data/spec/lib/hamster/vector/repeated_combination_spec.rb +0 -78
  489. data/spec/lib/hamster/vector/repeated_permutation_spec.rb +0 -94
  490. data/spec/lib/hamster/vector/reverse_each_spec.rb +0 -32
  491. data/spec/lib/hamster/vector/reverse_spec.rb +0 -22
  492. data/spec/lib/hamster/vector/rindex_spec.rb +0 -37
  493. data/spec/lib/hamster/vector/rotate_spec.rb +0 -74
  494. data/spec/lib/hamster/vector/sample_spec.rb +0 -14
  495. data/spec/lib/hamster/vector/select_spec.rb +0 -64
  496. data/spec/lib/hamster/vector/set_spec.rb +0 -175
  497. data/spec/lib/hamster/vector/shift_spec.rb +0 -28
  498. data/spec/lib/hamster/vector/shuffle_spec.rb +0 -44
  499. data/spec/lib/hamster/vector/slice_spec.rb +0 -241
  500. data/spec/lib/hamster/vector/sorting_spec.rb +0 -57
  501. data/spec/lib/hamster/vector/take_spec.rb +0 -43
  502. data/spec/lib/hamster/vector/take_while_spec.rb +0 -35
  503. data/spec/lib/hamster/vector/to_set_spec.rb +0 -23
  504. data/spec/lib/hamster/vector/transpose_spec.rb +0 -49
  505. data/spec/lib/hamster/vector/uniq_spec.rb +0 -56
  506. data/spec/lib/hamster/vector/unshift_spec.rb +0 -29
  507. data/spec/lib/hamster/vector/update_in_spec.rb +0 -83
  508. data/spec/lib/hamster/vector/values_at_spec.rb +0 -34
  509. data/spec/lib/hamster/vector/zip_spec.rb +0 -58
@@ -1,56 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- describe "#permutation" do
6
- let(:list) { Hamster.list(1,2,3,4,5) }
7
-
8
- context "with no block" do
9
- it "returns an Enumerator" do
10
- list.permutation.class.should be(Enumerator)
11
- list.permutation.to_a.sort.should == [1,2,3,4,5].permutation.to_a.sort
12
- end
13
- end
14
-
15
- context "with no argument" do
16
- it "yields all permutations of the list" do
17
- perms = list.permutation.to_a
18
- perms.size.should be(120)
19
- perms.sort.should == [1,2,3,4,5].permutation.to_a.sort
20
- perms.each { |item| item.should be_kind_of(Hamster::List) }
21
- end
22
- end
23
-
24
- context "with a length argument" do
25
- it "yields all N-size permutations of the list" do
26
- perms = list.permutation(3).to_a
27
- perms.size.should be(60)
28
- perms.sort.should == [1,2,3,4,5].permutation(3).to_a.sort
29
- perms.each { |item| item.should be_kind_of(Hamster::List) }
30
- end
31
- end
32
-
33
- context "with a length argument greater than length of list" do
34
- it "yields nothing" do
35
- list.permutation(6).to_a.should be_empty
36
- end
37
- end
38
-
39
- context "with a length argument of 0" do
40
- it "yields an empty list" do
41
- perms = list.permutation(0).to_a
42
- perms.size.should be(1)
43
- perms[0].should be_kind_of(Hamster::List)
44
- perms[0].should be_empty
45
- end
46
- end
47
-
48
- context "with a block" do
49
- it "returns the original list" do
50
- list.permutation(0) {}.should be(list)
51
- list.permutation(1) {}.should be(list)
52
- list.permutation {}.should be(list)
53
- end
54
- end
55
- end
56
- end
@@ -1,24 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- describe "#product" 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).product }.should_not raise_error
9
- end
10
- end
11
-
12
- [
13
- [[], 1],
14
- [[2], 2],
15
- [[1, 3, 5, 7, 11], 1155],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- it "returns #{expected.inspect}" do
19
- Hamster.list(*values).product.should == expected
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- [:reduce, :inject].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, &:+) }.should_not raise_error
10
- end
11
- end
12
-
13
- [
14
- [[], 10, 10],
15
- [[1], 10, 9],
16
- [[1, 2, 3], 10, 4],
17
- ].each do |values, initial, expected|
18
- context "on #{values.inspect}" do
19
- context "with an initial value of #{initial} and a block" do
20
- it "returns #{expected.inspect}" do
21
- Hamster.list(*values).send(method, initial) { |memo, item| memo - item }.should == expected
22
- end
23
- end
24
- end
25
- end
26
-
27
- [
28
- [[], nil],
29
- [[1], 1],
30
- [[1, 2, 3], -4],
31
- ].each do |values, expected|
32
- context "on #{values.inspect}" do
33
- context "with no initial value and a block" do
34
- it "returns #{expected.inspect}" do
35
- Hamster.list(*values).send(method) { |memo, item| memo - item }.should == expected
36
- end
37
- end
38
- end
39
- end
40
-
41
- context "with no block and a symbol argument" do
42
- it "uses the symbol as the name of a method to reduce with" do
43
- Hamster.list(1, 2, 3).send(method, :+).should == 6
44
- end
45
- end
46
-
47
- context "with no block and a string argument" do
48
- it "uses the string as the name of a method to reduce with" do
49
- Hamster.list(1, 2, 3).send(method, '+').should == 6
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,37 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- describe "#rotate" do
6
- let(:list) { Hamster.list(1,2,3,4,5) }
7
-
8
- context "when passed no argument" do
9
- it "returns a new list with the first element moved to the end" do
10
- list.rotate.should eql(Hamster.list(2,3,4,5,1))
11
- end
12
- end
13
-
14
- context "with an integral argument n" do
15
- it "returns a new list with the first (n % size) elements moved to the end" do
16
- list.rotate(2).should eql(Hamster.list(3,4,5,1,2))
17
- list.rotate(3).should eql(Hamster.list(4,5,1,2,3))
18
- list.rotate(4).should eql(Hamster.list(5,1,2,3,4))
19
- list.rotate(5).should eql(Hamster.list(1,2,3,4,5))
20
- list.rotate(-1).should eql(Hamster.list(5,1,2,3,4))
21
- end
22
- end
23
-
24
- context "with a non-numeric argument" do
25
- it "raises a TypeError" do
26
- -> { list.rotate('hello') }.should raise_error(TypeError)
27
- end
28
- end
29
-
30
- context "with an argument of zero (or one evenly divisible by list length)" do
31
- it "it returns self" do
32
- list.rotate(0).should be(list)
33
- list.rotate(5).should be(list)
34
- end
35
- end
36
- end
37
- end
@@ -1,14 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- describe "#sample" do
6
- let(:list) { Hamster.list(*(1..10)) }
7
-
8
- it "returns a randomly chosen item" do
9
- chosen = 100.times.map { list.sample }
10
- chosen.each { |item| list.include?(item).should == true }
11
- list.each { |item| chosen.include?(item).should == true }
12
- end
13
- end
14
- end
@@ -1,230 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe Hamster::List do
5
- let(:list) { Hamster.list(1,2,3,4) }
6
- let(:big) { Hamster.list(*1..10000) }
7
-
8
- [:slice, :[]].each do |method|
9
- describe "##{method}" do
10
- context "when passed a positive integral index" do
11
- it "returns the element at that index" do
12
- list.send(method, 0).should be(1)
13
- list.send(method, 1).should be(2)
14
- list.send(method, 2).should be(3)
15
- list.send(method, 3).should be(4)
16
- list.send(method, 4).should be(nil)
17
- list.send(method, 10).should be(nil)
18
-
19
- big.send(method, 0).should be(1)
20
- big.send(method, 9999).should be(10000)
21
- end
22
-
23
- it "leaves the original unchanged" do
24
- list.should eql(Hamster.list(1,2,3,4))
25
- end
26
- end
27
-
28
- context "when passed a negative integral index" do
29
- it "returns the element which is number (index.abs) counting from the end of the list" do
30
- list.send(method, -1).should be(4)
31
- list.send(method, -2).should be(3)
32
- list.send(method, -3).should be(2)
33
- list.send(method, -4).should be(1)
34
- list.send(method, -5).should be(nil)
35
- list.send(method, -10).should be(nil)
36
-
37
- big.send(method, -1).should be(10000)
38
- big.send(method, -10000).should be(1)
39
- end
40
- end
41
-
42
- context "when passed a positive integral index and count" do
43
- it "returns 'count' elements starting from 'index'" do
44
- list.send(method, 0, 0).should eql(Hamster.list)
45
- list.send(method, 0, 1).should eql(Hamster.list(1))
46
- list.send(method, 0, 2).should eql(Hamster.list(1,2))
47
- list.send(method, 0, 4).should eql(Hamster.list(1,2,3,4))
48
- list.send(method, 0, 6).should eql(Hamster.list(1,2,3,4))
49
- list.send(method, 0, -1).should be_nil
50
- list.send(method, 0, -2).should be_nil
51
- list.send(method, 0, -4).should be_nil
52
- list.send(method, 2, 0).should eql(Hamster.list)
53
- list.send(method, 2, 1).should eql(Hamster.list(3))
54
- list.send(method, 2, 2).should eql(Hamster.list(3,4))
55
- list.send(method, 2, 4).should eql(Hamster.list(3,4))
56
- list.send(method, 2, -1).should be_nil
57
- list.send(method, 4, 0).should eql(Hamster.list)
58
- list.send(method, 4, 2).should eql(Hamster.list)
59
- list.send(method, 4, -1).should be_nil
60
- list.send(method, 5, 0).should be_nil
61
- list.send(method, 5, 2).should be_nil
62
- list.send(method, 5, -1).should be_nil
63
- list.send(method, 6, 0).should be_nil
64
- list.send(method, 6, 2).should be_nil
65
- list.send(method, 6, -1).should be_nil
66
-
67
- big.send(method, 0, 3).should eql(Hamster.list(1,2,3))
68
- big.send(method, 1023, 4).should eql(Hamster.list(1024,1025,1026,1027))
69
- big.send(method, 1024, 4).should eql(Hamster.list(1025,1026,1027,1028))
70
- end
71
-
72
- it "leaves the original unchanged" do
73
- list.should eql(Hamster.list(1,2,3,4))
74
- end
75
- end
76
-
77
- context "when passed a negative integral index and count" do
78
- it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
79
- list.send(method, -1, 0).should eql(Hamster.list)
80
- list.send(method, -1, 1).should eql(Hamster.list(4))
81
- list.send(method, -1, 2).should eql(Hamster.list(4))
82
- list.send(method, -1, -1).should be_nil
83
- list.send(method, -2, 0).should eql(Hamster.list)
84
- list.send(method, -2, 1).should eql(Hamster.list(3))
85
- list.send(method, -2, 2).should eql(Hamster.list(3,4))
86
- list.send(method, -2, 4).should eql(Hamster.list(3,4))
87
- list.send(method, -2, -1).should be_nil
88
- list.send(method, -4, 0).should eql(Hamster.list)
89
- list.send(method, -4, 1).should eql(Hamster.list(1))
90
- list.send(method, -4, 2).should eql(Hamster.list(1,2))
91
- list.send(method, -4, 4).should eql(Hamster.list(1,2,3,4))
92
- list.send(method, -4, 6).should eql(Hamster.list(1,2,3,4))
93
- list.send(method, -4, -1).should be_nil
94
- list.send(method, -5, 0).should be_nil
95
- list.send(method, -5, 1).should be_nil
96
- list.send(method, -5, 10).should be_nil
97
- list.send(method, -5, -1).should be_nil
98
-
99
- big.send(method, -1, 1).should eql(Hamster.list(10000))
100
- big.send(method, -1, 2).should eql(Hamster.list(10000))
101
- big.send(method, -6, 2).should eql(Hamster.list(9995,9996))
102
- end
103
- end
104
-
105
- context "when passed a Range" do
106
- it "returns the elements whose indexes are within the given Range" do
107
- list.send(method, 0..-1).should eql(Hamster.list(1,2,3,4))
108
- list.send(method, 0..-10).should eql(Hamster.list)
109
- list.send(method, 0..0).should eql(Hamster.list(1))
110
- list.send(method, 0..1).should eql(Hamster.list(1,2))
111
- list.send(method, 0..2).should eql(Hamster.list(1,2,3))
112
- list.send(method, 0..3).should eql(Hamster.list(1,2,3,4))
113
- list.send(method, 0..4).should eql(Hamster.list(1,2,3,4))
114
- list.send(method, 0..10).should eql(Hamster.list(1,2,3,4))
115
- list.send(method, 2..-10).should eql(Hamster.list)
116
- list.send(method, 2..0).should eql(Hamster.list)
117
- list.send(method, 2..2).should eql(Hamster.list(3))
118
- list.send(method, 2..3).should eql(Hamster.list(3,4))
119
- list.send(method, 2..4).should eql(Hamster.list(3,4))
120
- list.send(method, 3..0).should eql(Hamster.list)
121
- list.send(method, 3..3).should eql(Hamster.list(4))
122
- list.send(method, 3..4).should eql(Hamster.list(4))
123
- list.send(method, 4..0).should eql(Hamster.list)
124
- list.send(method, 4..4).should eql(Hamster.list)
125
- list.send(method, 4..5).should eql(Hamster.list)
126
- list.send(method, 5..0).should be_nil
127
- list.send(method, 5..5).should be_nil
128
- list.send(method, 5..6).should be_nil
129
-
130
- big.send(method, 159..162).should eql(Hamster.list(160,161,162,163))
131
- big.send(method, 160..162).should eql(Hamster.list(161,162,163))
132
- big.send(method, 161..162).should eql(Hamster.list(162,163))
133
- big.send(method, 9999..10100).should eql(Hamster.list(10000))
134
- big.send(method, 10000..10100).should eql(Hamster.list)
135
- big.send(method, 10001..10100).should be_nil
136
-
137
- list.send(method, 0...-1).should eql(Hamster.list(1,2,3))
138
- list.send(method, 0...-10).should eql(Hamster.list)
139
- list.send(method, 0...0).should eql(Hamster.list)
140
- list.send(method, 0...1).should eql(Hamster.list(1))
141
- list.send(method, 0...2).should eql(Hamster.list(1,2))
142
- list.send(method, 0...3).should eql(Hamster.list(1,2,3))
143
- list.send(method, 0...4).should eql(Hamster.list(1,2,3,4))
144
- list.send(method, 0...10).should eql(Hamster.list(1,2,3,4))
145
- list.send(method, 2...-10).should eql(Hamster.list)
146
- list.send(method, 2...0).should eql(Hamster.list)
147
- list.send(method, 2...2).should eql(Hamster.list)
148
- list.send(method, 2...3).should eql(Hamster.list(3))
149
- list.send(method, 2...4).should eql(Hamster.list(3,4))
150
- list.send(method, 3...0).should eql(Hamster.list)
151
- list.send(method, 3...3).should eql(Hamster.list)
152
- list.send(method, 3...4).should eql(Hamster.list(4))
153
- list.send(method, 4...0).should eql(Hamster.list)
154
- list.send(method, 4...4).should eql(Hamster.list)
155
- list.send(method, 4...5).should eql(Hamster.list)
156
- list.send(method, 5...0).should be_nil
157
- list.send(method, 5...5).should be_nil
158
- list.send(method, 5...6).should be_nil
159
-
160
- big.send(method, 159...162).should eql(Hamster.list(160,161,162))
161
- big.send(method, 160...162).should eql(Hamster.list(161,162))
162
- big.send(method, 161...162).should eql(Hamster.list(162))
163
- big.send(method, 9999...10100).should eql(Hamster.list(10000))
164
- big.send(method, 10000...10100).should eql(Hamster.list)
165
- big.send(method, 10001...10100).should be_nil
166
-
167
- list.send(method, -1..-1).should eql(Hamster.list(4))
168
- list.send(method, -1...-1).should eql(Hamster.list)
169
- list.send(method, -1..3).should eql(Hamster.list(4))
170
- list.send(method, -1...3).should eql(Hamster.list)
171
- list.send(method, -1..4).should eql(Hamster.list(4))
172
- list.send(method, -1...4).should eql(Hamster.list(4))
173
- list.send(method, -1..10).should eql(Hamster.list(4))
174
- list.send(method, -1...10).should eql(Hamster.list(4))
175
- list.send(method, -1..0).should eql(Hamster.list)
176
- list.send(method, -1..-4).should eql(Hamster.list)
177
- list.send(method, -1...-4).should eql(Hamster.list)
178
- list.send(method, -1..-6).should eql(Hamster.list)
179
- list.send(method, -1...-6).should eql(Hamster.list)
180
- list.send(method, -2..-2).should eql(Hamster.list(3))
181
- list.send(method, -2...-2).should eql(Hamster.list)
182
- list.send(method, -2..-1).should eql(Hamster.list(3,4))
183
- list.send(method, -2...-1).should eql(Hamster.list(3))
184
- list.send(method, -2..10).should eql(Hamster.list(3,4))
185
- list.send(method, -2...10).should eql(Hamster.list(3,4))
186
-
187
- big.send(method, -1..-1).should eql(Hamster.list(10000))
188
- big.send(method, -1..9999).should eql(Hamster.list(10000))
189
- big.send(method, -1...9999).should eql(Hamster.list)
190
- big.send(method, -2...9999).should eql(Hamster.list(9999))
191
- big.send(method, -2..-1).should eql(Hamster.list(9999,10000))
192
-
193
- list.send(method, -4..-4).should eql(Hamster.list(1))
194
- list.send(method, -4..-2).should eql(Hamster.list(1,2,3))
195
- list.send(method, -4...-2).should eql(Hamster.list(1,2))
196
- list.send(method, -4..-1).should eql(Hamster.list(1,2,3,4))
197
- list.send(method, -4...-1).should eql(Hamster.list(1,2,3))
198
- list.send(method, -4..3).should eql(Hamster.list(1,2,3,4))
199
- list.send(method, -4...3).should eql(Hamster.list(1,2,3))
200
- list.send(method, -4..4).should eql(Hamster.list(1,2,3,4))
201
- list.send(method, -4...4).should eql(Hamster.list(1,2,3,4))
202
- list.send(method, -4..0).should eql(Hamster.list(1))
203
- list.send(method, -4...0).should eql(Hamster.list)
204
- list.send(method, -4..1).should eql(Hamster.list(1,2))
205
- list.send(method, -4...1).should eql(Hamster.list(1))
206
-
207
- list.send(method, -5..-5).should be_nil
208
- list.send(method, -5...-5).should be_nil
209
- list.send(method, -5..-4).should be_nil
210
- list.send(method, -5..-1).should be_nil
211
- list.send(method, -5..10).should be_nil
212
-
213
- big.send(method, -10001..-1).should be_nil
214
- end
215
-
216
- it "leaves the original unchanged" do
217
- list.should eql(Hamster.list(1,2,3,4))
218
- end
219
- end
220
- end
221
-
222
- context "when passed a subclass of Range" do
223
- it "works the same as with a Range" do
224
- subclass = Class.new(Range)
225
- list.send(method, subclass.new(1,2)).should eql(Hamster.list(2,3))
226
- list.send(method, subclass.new(-3,-1,true)).should eql(Hamster.list(2,3))
227
- end
228
- end
229
- end
230
- end
@@ -1,77 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/list"
3
-
4
- describe "Hamster.list#span" do
5
- it "is lazy" do
6
- -> { Hamster.stream { |item| fail }.span { true } }.should_not raise_error
7
- end
8
-
9
- describe <<-DESC do
10
- given a predicate (in the form of a block), splits the list into two lists
11
- (returned as an array) such that elements in the first list (the prefix) are
12
- taken from the head of the list while the predicate is satisfied, and elements
13
- in the second list (the remainder) are the remaining elements from the list
14
- once the predicate is not satisfied. For example:
15
- DESC
16
-
17
- [
18
- [[], [], []],
19
- [[1], [1], []],
20
- [[1, 2], [1, 2], []],
21
- [[1, 2, 3], [1, 2], [3]],
22
- [[1, 2, 3, 4], [1, 2], [3, 4]],
23
- [[2, 3, 4], [2], [3, 4]],
24
- [[3, 4], [], [3, 4]],
25
- [[4], [], [4]],
26
- ].each do |values, expected_prefix, expected_remainder|
27
- context "given the list #{values.inspect}" do
28
- let(:list) { Hamster.list(*values) }
29
-
30
- context "and a predicate that returns true for values <= 2" do
31
- let(:result) { list.span { |item| item <= 2 }}
32
- let(:prefix) { result.first }
33
- let(:remainder) { result.last }
34
-
35
- it "preserves the original" do
36
- result
37
- list.should eql(Hamster.list(*values))
38
- end
39
-
40
- it "returns the prefix as #{expected_prefix.inspect}" do
41
- prefix.should eql(Hamster.list(*expected_prefix))
42
- end
43
-
44
- it "returns the remainder as #{expected_remainder.inspect}" do
45
- remainder.should eql(Hamster.list(*expected_remainder))
46
- end
47
-
48
- it "calls the block only once for each element" do
49
- count = 0
50
- result = list.span { |item| count += 1; item <= 2 }
51
- # force realization of lazy lists
52
- result.first.size.should == expected_prefix.size
53
- result.last.size.should == expected_remainder.size
54
- # it may not need to call the block on every element, just up to the
55
- # point where the block first returns a false value
56
- count.should <= values.size
57
- end
58
- end
59
-
60
- context "without a predicate" do
61
- it "returns a frozen array" do
62
- list.span.class.should be(Array)
63
- list.span.should be_frozen
64
- end
65
-
66
- it "returns self as the prefix" do
67
- list.span.first.should equal(list)
68
- end
69
-
70
- it "returns an empty list as the remainder" do
71
- list.span.last.should be_empty
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end