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,14 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- describe "#sample" do
6
- let(:vector) { Hamster::Vector.new(1..10) }
7
-
8
- it "returns a randomly chosen item" do
9
- chosen = 100.times.map { vector.sample }
10
- chosen.each { |item| vector.include?(item).should == true }
11
- vector.each { |item| chosen.include?(item).should == true }
12
- end
13
- end
14
- end
@@ -1,64 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- [:select, :find_all].each do |method|
6
- describe "##{method}" do
7
- let(:vector) { Hamster.vector("A", "B", "C") }
8
-
9
- describe "with a block" do
10
- it "preserves the original" do
11
- vector.send(method) { |item| item == "A" }
12
- vector.should eql(Hamster.vector("A", "B", "C"))
13
- end
14
-
15
- it "returns a vector with the matching values" do
16
- vector.send(method) { |item| item == "A" }.should eql(Hamster.vector("A"))
17
- end
18
- end
19
-
20
- describe "with no block" do
21
- it "returns an Enumerator" do
22
- vector.send(method).class.should be(Enumerator)
23
- vector.send(method).each { |item| item == "A" }.should eql(Hamster.vector("A"))
24
- end
25
- end
26
-
27
- describe "when nothing matches" do
28
- it "preserves the original" do
29
- vector.send(method) { |item| false }
30
- vector.should eql(Hamster.vector("A", "B", "C"))
31
- end
32
-
33
- it "returns an empty vector" do
34
- vector.send(method) { |item| false }.should equal(Hamster.vector)
35
- end
36
- end
37
-
38
- context "on an empty vector" do
39
- it "returns self" do
40
- Hamster.vector.send(method) { |item| true }.should be(Hamster.vector)
41
- end
42
- end
43
-
44
- context "from a subclass" do
45
- it "returns an instance of the subclass" do
46
- subclass = Class.new(Hamster::Vector)
47
- instance = subclass[1,2,3]
48
- instance.send(method) { |x| x > 1 }.class.should be(subclass)
49
- end
50
- end
51
-
52
- it "works with a variety of inputs" do
53
- [1, 2, 10, 31, 32, 33, 1023, 1024, 1025].each do |size|
54
- [0, 5, 32, 50, 500, 800, 1024].each do |threshold|
55
- vector = V.new(1..size)
56
- result = vector.send(method) { |item| item <= threshold }
57
- result.size.should == [size, threshold].min
58
- result.should eql(V.new(1..[size, threshold].min))
59
- end
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,175 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(*values) }
6
-
7
- describe "#set" do
8
- context "when empty" do
9
- let(:vector) { Hamster.vector }
10
-
11
- it "raises an error for index -1" do
12
- expect { vector.set(-1, :a) }.to raise_error
13
- end
14
-
15
- it "allows indexes 0 and 1 to be set" do
16
- vector.set(0, :a).should eql(Hamster.vector(:a))
17
- vector.set(1, :a).should eql(Hamster.vector(nil, :a))
18
- end
19
- end
20
-
21
- context "when not empty" do
22
- let(:vector) { Hamster.vector("A", "B", "C") }
23
-
24
- context "with a block" do
25
- context "and a positive index" do
26
- context "within the absolute bounds of the vector" do
27
- it "passes the current value to the block" do
28
- vector.set(1) { |value| value.should == "B" }
29
- end
30
-
31
- it "replaces the value with the result of the block" do
32
- result = vector.set(1) { |value| "FLIBBLE" }
33
- result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
34
- end
35
-
36
- it "supports to_proc methods" do
37
- result = vector.set(1, &:downcase)
38
- result.should eql(Hamster.vector("A", "b", "C"))
39
- end
40
- end
41
-
42
- context "just past the end of the vector" do
43
- it "passes nil to the block and adds a new value" do
44
- result = vector.set(3) { |value| value.should be_nil; "D" }
45
- result.should eql(Hamster.vector("A", "B", "C", "D"))
46
- end
47
- end
48
-
49
- context "further outside the bounds of the vector" do
50
- it "passes nil to the block, fills up missing nils, and adds a new value" do
51
- result = vector.set(5) { |value| value.should be_nil; "D" }
52
- result.should eql(Hamster.vector("A", "B", "C", nil, nil, "D"))
53
- end
54
- end
55
- end
56
-
57
- context "and a negative index" do
58
- context "within the absolute bounds of the vector" do
59
- it "passes the current value to the block" do
60
- vector.set(-2) { |value| value.should == "B" }
61
- end
62
-
63
- it "replaces the value with the result of the block" do
64
- result = vector.set(-2) { |value| "FLIBBLE" }
65
- result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
66
- end
67
-
68
- it "supports to_proc methods" do
69
- result = vector.set(-2, &:downcase)
70
- result.should eql(Hamster.vector("A", "b", "C"))
71
- end
72
- end
73
-
74
- context "outside the absolute bounds of the vector" do
75
- it "raises an error" do
76
- expect { vector.set(-vector.size.next) {} }.to raise_error
77
- end
78
- end
79
- end
80
- end
81
-
82
- context "with a value" do
83
- context "and a positive index" do
84
- context "within the absolute bounds of the vector" do
85
- let(:set) { vector.set(1, "FLIBBLE") }
86
-
87
- it "preserves the original" do
88
- vector.should eql(Hamster.vector("A", "B", "C"))
89
- end
90
-
91
- it "sets the new value at the specified index" do
92
- set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
93
- end
94
- end
95
-
96
- context "just past the end of the vector" do
97
- it "adds a new value" do
98
- result = vector.set(3, "FLIBBLE")
99
- result.should eql(Hamster.vector("A", "B", "C", "FLIBBLE"))
100
- end
101
- end
102
-
103
- context "outside the absolute bounds of the vector" do
104
- it "fills up with nils" do
105
- result = vector.set(5, "FLIBBLE")
106
- result.should eql(Hamster.vector("A", "B", "C", nil, nil, "FLIBBLE"))
107
- end
108
- end
109
- end
110
-
111
- context "with a negative index" do
112
- let(:set) { vector.set(-2, "FLIBBLE") }
113
-
114
- it "preserves the original" do
115
- set
116
- vector.should eql(Hamster.vector("A", "B", "C"))
117
- end
118
-
119
- it "sets the new value at the specified index" do
120
- set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
121
- end
122
- end
123
-
124
- context "outside the absolute bounds of the vector" do
125
- it "raises an error" do
126
- expect { vector.set(-vector.size.next, "FLIBBLE") }.to raise_error
127
- end
128
- end
129
- end
130
- end
131
-
132
- context "from a subclass" do
133
- it "returns an instance of the subclass" do
134
- subclass = Class.new(Hamster::Vector)
135
- instance = subclass[1,2,3]
136
- instance.set(1, 2.5).class.should be(subclass)
137
- end
138
- end
139
-
140
- [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
141
- context "on a #{size}-item vector" do
142
- it "works correctly" do
143
- array = (1..size).to_a
144
- vector = V.new(array)
145
-
146
- [0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
147
- value = rand(10000)
148
- array[i] = value
149
- vector = vector.set(i, value)
150
- vector[i].should be(value)
151
- end
152
-
153
- 0.upto(size-1) do |i|
154
- vector.get(i).should == array[i]
155
- end
156
- end
157
- end
158
- end
159
-
160
- context "with an identical value to an existing item" do
161
- [1, 2, 5, 31,32, 33, 100, 200].each do |size|
162
- context "on a #{size}-item vector" do
163
- let(:array) { (0...size).map { |x| x * x} }
164
- let(:vector) { Hamster.vector(*array) }
165
-
166
- it "returns self" do
167
- (0...size).each do |index|
168
- vector.set(index, index * index).should equal(vector)
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end
175
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- describe "#shift" do
6
- [
7
- [[], []],
8
- [["A"], []],
9
- [%w[A B C], %w[B C]],
10
- [1..31, 2..31],
11
- [1..32, 2..32],
12
- [1..33, 2..33]
13
- ].each do |values, expected|
14
- context "on #{values.inspect}" do
15
- let(:vector) { Hamster.vector(*values) }
16
-
17
- it "preserves the original" do
18
- vector.shift
19
- vector.should eql(Hamster.vector(*values))
20
- end
21
-
22
- it "returns #{expected.inspect}" do
23
- vector.shift.should eql(Hamster.vector(*expected))
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,44 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- describe "#shuffle" do
6
- let(:vector) { Hamster.vector(1,2,3,4) }
7
-
8
- it "returns the same values, in a usually different order" do
9
- different = false
10
- 10.times do
11
- shuffled = vector.shuffle
12
- shuffled.sort.should eql(vector)
13
- different ||= (shuffled != vector)
14
- end
15
- different.should be(true)
16
- end
17
-
18
- it "leaves the original unchanged" do
19
- vector.shuffle
20
- vector.should eql(Hamster.vector(1,2,3,4))
21
- end
22
-
23
- context "from a subclass" do
24
- it "returns an instance of the subclass" do
25
- subclass = Class.new(Hamster::Vector)
26
- instance = subclass.new([1,2,3])
27
- instance.shuffle.class.should be(subclass)
28
- end
29
- end
30
-
31
- [32, 33, 1023, 1024, 1025].each do |size|
32
- context "on a #{size}-item vector" do
33
- it "works correctly" do
34
- vector = V.new(1..size)
35
- shuffled = vector.shuffle
36
- shuffled = vector.shuffle while shuffled.eql?(vector) # in case we get the same
37
- vector.should eql(V.new(1..size))
38
- shuffled.size.should == vector.size
39
- shuffled.sort.should eql(vector)
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,241 +0,0 @@
1
- require "spec_helper"
2
- require "hamster/vector"
3
-
4
- describe Hamster::Vector do
5
- let(:vector) { Hamster.vector(1,2,3,4) }
6
- let(:big) { Hamster::Vector.new(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
- vector.send(method, 0).should be(1)
13
- vector.send(method, 1).should be(2)
14
- vector.send(method, 2).should be(3)
15
- vector.send(method, 3).should be(4)
16
- vector.send(method, 4).should be(nil)
17
- vector.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
- vector.should eql(Hamster.vector(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 vector" do
30
- vector.send(method, -1).should be(4)
31
- vector.send(method, -2).should be(3)
32
- vector.send(method, -3).should be(2)
33
- vector.send(method, -4).should be(1)
34
- vector.send(method, -5).should be(nil)
35
- vector.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
- vector.send(method, 0, 0).should eql(Hamster.vector)
45
- vector.send(method, 0, 1).should eql(Hamster.vector(1))
46
- vector.send(method, 0, 2).should eql(Hamster.vector(1,2))
47
- vector.send(method, 0, 4).should eql(Hamster.vector(1,2,3,4))
48
- vector.send(method, 0, 6).should eql(Hamster.vector(1,2,3,4))
49
- vector.send(method, 0, -1).should be_nil
50
- vector.send(method, 0, -2).should be_nil
51
- vector.send(method, 0, -4).should be_nil
52
- vector.send(method, 2, 0).should eql(Hamster.vector)
53
- vector.send(method, 2, 1).should eql(Hamster.vector(3))
54
- vector.send(method, 2, 2).should eql(Hamster.vector(3,4))
55
- vector.send(method, 2, 4).should eql(Hamster.vector(3,4))
56
- vector.send(method, 2, -1).should be_nil
57
- vector.send(method, 4, 0).should eql(Hamster.vector)
58
- vector.send(method, 4, 2).should eql(Hamster.vector)
59
- vector.send(method, 4, -1).should be_nil
60
- vector.send(method, 5, 0).should be_nil
61
- vector.send(method, 5, 2).should be_nil
62
- vector.send(method, 5, -1).should be_nil
63
- vector.send(method, 6, 0).should be_nil
64
- vector.send(method, 6, 2).should be_nil
65
- vector.send(method, 6, -1).should be_nil
66
-
67
- big.send(method, 0, 3).should eql(Hamster.vector(1,2,3))
68
- big.send(method, 1023, 4).should eql(Hamster.vector(1024,1025,1026,1027))
69
- big.send(method, 1024, 4).should eql(Hamster.vector(1025,1026,1027,1028))
70
- end
71
-
72
- it "leaves the original unchanged" do
73
- vector.should eql(Hamster.vector(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
- vector.send(method, -1, 0).should eql(Hamster.vector)
80
- vector.send(method, -1, 1).should eql(Hamster.vector(4))
81
- vector.send(method, -1, 2).should eql(Hamster.vector(4))
82
- vector.send(method, -1, -1).should be_nil
83
- vector.send(method, -2, 0).should eql(Hamster.vector)
84
- vector.send(method, -2, 1).should eql(Hamster.vector(3))
85
- vector.send(method, -2, 2).should eql(Hamster.vector(3,4))
86
- vector.send(method, -2, 4).should eql(Hamster.vector(3,4))
87
- vector.send(method, -2, -1).should be_nil
88
- vector.send(method, -4, 0).should eql(Hamster.vector)
89
- vector.send(method, -4, 1).should eql(Hamster.vector(1))
90
- vector.send(method, -4, 2).should eql(Hamster.vector(1,2))
91
- vector.send(method, -4, 4).should eql(Hamster.vector(1,2,3,4))
92
- vector.send(method, -4, 6).should eql(Hamster.vector(1,2,3,4))
93
- vector.send(method, -4, -1).should be_nil
94
- vector.send(method, -5, 0).should be_nil
95
- vector.send(method, -5, 1).should be_nil
96
- vector.send(method, -5, 10).should be_nil
97
- vector.send(method, -5, -1).should be_nil
98
-
99
- big.send(method, -1, 1).should eql(Hamster.vector(10000))
100
- big.send(method, -1, 2).should eql(Hamster.vector(10000))
101
- big.send(method, -6, 2).should eql(Hamster.vector(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
- vector.send(method, 0..-1).should eql(Hamster.vector(1,2,3,4))
108
- vector.send(method, 0..-10).should eql(Hamster.vector)
109
- vector.send(method, 0..0).should eql(Hamster.vector(1))
110
- vector.send(method, 0..1).should eql(Hamster.vector(1,2))
111
- vector.send(method, 0..2).should eql(Hamster.vector(1,2,3))
112
- vector.send(method, 0..3).should eql(Hamster.vector(1,2,3,4))
113
- vector.send(method, 0..4).should eql(Hamster.vector(1,2,3,4))
114
- vector.send(method, 0..10).should eql(Hamster.vector(1,2,3,4))
115
- vector.send(method, 2..-10).should eql(Hamster.vector)
116
- vector.send(method, 2..0).should eql(Hamster.vector)
117
- vector.send(method, 2..2).should eql(Hamster.vector(3))
118
- vector.send(method, 2..3).should eql(Hamster.vector(3,4))
119
- vector.send(method, 2..4).should eql(Hamster.vector(3,4))
120
- vector.send(method, 3..0).should eql(Hamster.vector)
121
- vector.send(method, 3..3).should eql(Hamster.vector(4))
122
- vector.send(method, 3..4).should eql(Hamster.vector(4))
123
- vector.send(method, 4..0).should eql(Hamster.vector)
124
- vector.send(method, 4..4).should eql(Hamster.vector)
125
- vector.send(method, 4..5).should eql(Hamster.vector)
126
- vector.send(method, 5..0).should be_nil
127
- vector.send(method, 5..5).should be_nil
128
- vector.send(method, 5..6).should be_nil
129
-
130
- big.send(method, 159..162).should eql(Hamster.vector(160,161,162,163))
131
- big.send(method, 160..162).should eql(Hamster.vector(161,162,163))
132
- big.send(method, 161..162).should eql(Hamster.vector(162,163))
133
- big.send(method, 9999..10100).should eql(Hamster.vector(10000))
134
- big.send(method, 10000..10100).should eql(Hamster.vector)
135
- big.send(method, 10001..10100).should be_nil
136
-
137
- vector.send(method, 0...-1).should eql(Hamster.vector(1,2,3))
138
- vector.send(method, 0...-10).should eql(Hamster.vector)
139
- vector.send(method, 0...0).should eql(Hamster.vector)
140
- vector.send(method, 0...1).should eql(Hamster.vector(1))
141
- vector.send(method, 0...2).should eql(Hamster.vector(1,2))
142
- vector.send(method, 0...3).should eql(Hamster.vector(1,2,3))
143
- vector.send(method, 0...4).should eql(Hamster.vector(1,2,3,4))
144
- vector.send(method, 0...10).should eql(Hamster.vector(1,2,3,4))
145
- vector.send(method, 2...-10).should eql(Hamster.vector)
146
- vector.send(method, 2...0).should eql(Hamster.vector)
147
- vector.send(method, 2...2).should eql(Hamster.vector)
148
- vector.send(method, 2...3).should eql(Hamster.vector(3))
149
- vector.send(method, 2...4).should eql(Hamster.vector(3,4))
150
- vector.send(method, 3...0).should eql(Hamster.vector)
151
- vector.send(method, 3...3).should eql(Hamster.vector)
152
- vector.send(method, 3...4).should eql(Hamster.vector(4))
153
- vector.send(method, 4...0).should eql(Hamster.vector)
154
- vector.send(method, 4...4).should eql(Hamster.vector)
155
- vector.send(method, 4...5).should eql(Hamster.vector)
156
- vector.send(method, 5...0).should be_nil
157
- vector.send(method, 5...5).should be_nil
158
- vector.send(method, 5...6).should be_nil
159
-
160
- big.send(method, 159...162).should eql(Hamster.vector(160,161,162))
161
- big.send(method, 160...162).should eql(Hamster.vector(161,162))
162
- big.send(method, 161...162).should eql(Hamster.vector(162))
163
- big.send(method, 9999...10100).should eql(Hamster.vector(10000))
164
- big.send(method, 10000...10100).should eql(Hamster.vector)
165
- big.send(method, 10001...10100).should be_nil
166
-
167
- vector.send(method, -1..-1).should eql(Hamster.vector(4))
168
- vector.send(method, -1...-1).should eql(Hamster.vector)
169
- vector.send(method, -1..3).should eql(Hamster.vector(4))
170
- vector.send(method, -1...3).should eql(Hamster.vector)
171
- vector.send(method, -1..4).should eql(Hamster.vector(4))
172
- vector.send(method, -1...4).should eql(Hamster.vector(4))
173
- vector.send(method, -1..10).should eql(Hamster.vector(4))
174
- vector.send(method, -1...10).should eql(Hamster.vector(4))
175
- vector.send(method, -1..0).should eql(Hamster.vector)
176
- vector.send(method, -1..-4).should eql(Hamster.vector)
177
- vector.send(method, -1...-4).should eql(Hamster.vector)
178
- vector.send(method, -1..-6).should eql(Hamster.vector)
179
- vector.send(method, -1...-6).should eql(Hamster.vector)
180
- vector.send(method, -2..-2).should eql(Hamster.vector(3))
181
- vector.send(method, -2...-2).should eql(Hamster.vector)
182
- vector.send(method, -2..-1).should eql(Hamster.vector(3,4))
183
- vector.send(method, -2...-1).should eql(Hamster.vector(3))
184
- vector.send(method, -2..10).should eql(Hamster.vector(3,4))
185
- vector.send(method, -2...10).should eql(Hamster.vector(3,4))
186
-
187
- big.send(method, -1..-1).should eql(Hamster.vector(10000))
188
- big.send(method, -1..9999).should eql(Hamster.vector(10000))
189
- big.send(method, -1...9999).should eql(Hamster.vector)
190
- big.send(method, -2...9999).should eql(Hamster.vector(9999))
191
- big.send(method, -2..-1).should eql(Hamster.vector(9999,10000))
192
-
193
- vector.send(method, -4..-4).should eql(Hamster.vector(1))
194
- vector.send(method, -4..-2).should eql(Hamster.vector(1,2,3))
195
- vector.send(method, -4...-2).should eql(Hamster.vector(1,2))
196
- vector.send(method, -4..-1).should eql(Hamster.vector(1,2,3,4))
197
- vector.send(method, -4...-1).should eql(Hamster.vector(1,2,3))
198
- vector.send(method, -4..3).should eql(Hamster.vector(1,2,3,4))
199
- vector.send(method, -4...3).should eql(Hamster.vector(1,2,3))
200
- vector.send(method, -4..4).should eql(Hamster.vector(1,2,3,4))
201
- vector.send(method, -4...4).should eql(Hamster.vector(1,2,3,4))
202
- vector.send(method, -4..0).should eql(Hamster.vector(1))
203
- vector.send(method, -4...0).should eql(Hamster.vector)
204
- vector.send(method, -4..1).should eql(Hamster.vector(1,2))
205
- vector.send(method, -4...1).should eql(Hamster.vector(1))
206
-
207
- vector.send(method, -5..-5).should be_nil
208
- vector.send(method, -5...-5).should be_nil
209
- vector.send(method, -5..-4).should be_nil
210
- vector.send(method, -5..-1).should be_nil
211
- vector.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
- vector.should eql(Hamster.vector(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
- vector.send(method, subclass.new(1,2)).should eql(Hamster.vector(2,3))
226
- vector.send(method, subclass.new(-3,-1,true)).should eql(Hamster.vector(2,3))
227
- end
228
- end
229
-
230
- context "on a subclass of Vector" do
231
- it "with index and count or a range, returns an instance of the subclass" do
232
- subclass = Class.new(Hamster::Vector)
233
- instance = subclass.new([1,2,3])
234
- instance.send(method, 0, 0).class.should be(subclass)
235
- instance.send(method, 0, 2).class.should be(subclass)
236
- instance.send(method, 0..0).class.should be(subclass)
237
- instance.send(method, 1..-1).class.should be(subclass)
238
- end
239
- end
240
- end
241
- end