immutable-ruby 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. checksums.yaml +5 -5
  2. data/lib/immutable/core_ext/enumerable.rb +1 -1
  3. data/lib/immutable/core_ext/io.rb +1 -1
  4. data/lib/immutable/core_ext.rb +2 -2
  5. data/lib/immutable/deque.rb +50 -15
  6. data/lib/immutable/enumerable.rb +19 -10
  7. data/lib/immutable/hash.rb +128 -28
  8. data/lib/immutable/list.rb +48 -48
  9. data/lib/immutable/nested.rb +10 -7
  10. data/lib/immutable/set.rb +30 -30
  11. data/lib/immutable/sorted_set.rb +77 -37
  12. data/lib/immutable/trie.rb +21 -29
  13. data/lib/immutable/vector.rb +61 -46
  14. data/lib/immutable/version.rb +1 -1
  15. data/lib/immutable.rb +9 -9
  16. metadata +44 -687
  17. data/spec/fixtures/io_spec.txt +0 -3
  18. data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
  19. data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
  20. data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
  21. data/spec/lib/immutable/deque/clear_spec.rb +0 -33
  22. data/spec/lib/immutable/deque/construction_spec.rb +0 -29
  23. data/spec/lib/immutable/deque/copying_spec.rb +0 -19
  24. data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
  25. data/spec/lib/immutable/deque/empty_spec.rb +0 -39
  26. data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
  27. data/spec/lib/immutable/deque/first_spec.rb +0 -17
  28. data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
  29. data/spec/lib/immutable/deque/last_spec.rb +0 -17
  30. data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
  31. data/spec/lib/immutable/deque/new_spec.rb +0 -43
  32. data/spec/lib/immutable/deque/pop_spec.rb +0 -36
  33. data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
  34. data/spec/lib/immutable/deque/push_spec.rb +0 -36
  35. data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
  36. data/spec/lib/immutable/deque/shift_spec.rb +0 -29
  37. data/spec/lib/immutable/deque/size_spec.rb +0 -19
  38. data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
  39. data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
  40. data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
  41. data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
  42. data/spec/lib/immutable/hash/all_spec.rb +0 -53
  43. data/spec/lib/immutable/hash/any_spec.rb +0 -53
  44. data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
  45. data/spec/lib/immutable/hash/clear_spec.rb +0 -42
  46. data/spec/lib/immutable/hash/construction_spec.rb +0 -38
  47. data/spec/lib/immutable/hash/copying_spec.rb +0 -13
  48. data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
  49. data/spec/lib/immutable/hash/delete_spec.rb +0 -39
  50. data/spec/lib/immutable/hash/each_spec.rb +0 -77
  51. data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
  52. data/spec/lib/immutable/hash/empty_spec.rb +0 -43
  53. data/spec/lib/immutable/hash/eql_spec.rb +0 -69
  54. data/spec/lib/immutable/hash/except_spec.rb +0 -42
  55. data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
  56. data/spec/lib/immutable/hash/find_spec.rb +0 -43
  57. data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
  58. data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
  59. data/spec/lib/immutable/hash/get_spec.rb +0 -79
  60. data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
  61. data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
  62. data/spec/lib/immutable/hash/hash_spec.rb +0 -29
  63. data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
  64. data/spec/lib/immutable/hash/invert_spec.rb +0 -30
  65. data/spec/lib/immutable/hash/key_spec.rb +0 -27
  66. data/spec/lib/immutable/hash/keys_spec.rb +0 -15
  67. data/spec/lib/immutable/hash/map_spec.rb +0 -45
  68. data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
  69. data/spec/lib/immutable/hash/merge_spec.rb +0 -82
  70. data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
  71. data/spec/lib/immutable/hash/new_spec.rb +0 -70
  72. data/spec/lib/immutable/hash/none_spec.rb +0 -48
  73. data/spec/lib/immutable/hash/partition_spec.rb +0 -35
  74. data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
  75. data/spec/lib/immutable/hash/put_spec.rb +0 -102
  76. data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
  77. data/spec/lib/immutable/hash/reject_spec.rb +0 -61
  78. data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
  79. data/spec/lib/immutable/hash/sample_spec.rb +0 -13
  80. data/spec/lib/immutable/hash/select_spec.rb +0 -57
  81. data/spec/lib/immutable/hash/size_spec.rb +0 -51
  82. data/spec/lib/immutable/hash/slice_spec.rb +0 -44
  83. data/spec/lib/immutable/hash/sort_spec.rb +0 -26
  84. data/spec/lib/immutable/hash/store_spec.rb +0 -75
  85. data/spec/lib/immutable/hash/take_spec.rb +0 -35
  86. data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
  87. data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
  88. data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
  89. data/spec/lib/immutable/hash/values_at_spec.rb +0 -13
  90. data/spec/lib/immutable/hash/values_spec.rb +0 -23
  91. data/spec/lib/immutable/list/add_spec.rb +0 -25
  92. data/spec/lib/immutable/list/all_spec.rb +0 -57
  93. data/spec/lib/immutable/list/any_spec.rb +0 -49
  94. data/spec/lib/immutable/list/append_spec.rb +0 -38
  95. data/spec/lib/immutable/list/at_spec.rb +0 -29
  96. data/spec/lib/immutable/list/break_spec.rb +0 -69
  97. data/spec/lib/immutable/list/cadr_spec.rb +0 -38
  98. data/spec/lib/immutable/list/chunk_spec.rb +0 -28
  99. data/spec/lib/immutable/list/clear_spec.rb +0 -24
  100. data/spec/lib/immutable/list/combination_spec.rb +0 -33
  101. data/spec/lib/immutable/list/compact_spec.rb +0 -34
  102. data/spec/lib/immutable/list/compare_spec.rb +0 -30
  103. data/spec/lib/immutable/list/cons_spec.rb +0 -25
  104. data/spec/lib/immutable/list/construction_spec.rb +0 -110
  105. data/spec/lib/immutable/list/copying_spec.rb +0 -19
  106. data/spec/lib/immutable/list/count_spec.rb +0 -36
  107. data/spec/lib/immutable/list/cycle_spec.rb +0 -28
  108. data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
  109. data/spec/lib/immutable/list/delete_spec.rb +0 -16
  110. data/spec/lib/immutable/list/drop_spec.rb +0 -30
  111. data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
  112. data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
  113. data/spec/lib/immutable/list/each_spec.rb +0 -40
  114. data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
  115. data/spec/lib/immutable/list/empty_spec.rb +0 -23
  116. data/spec/lib/immutable/list/eql_spec.rb +0 -61
  117. data/spec/lib/immutable/list/fill_spec.rb +0 -49
  118. data/spec/lib/immutable/list/find_all_spec.rb +0 -70
  119. data/spec/lib/immutable/list/find_index_spec.rb +0 -35
  120. data/spec/lib/immutable/list/find_spec.rb +0 -42
  121. data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
  122. data/spec/lib/immutable/list/flatten_spec.rb +0 -30
  123. data/spec/lib/immutable/list/grep_spec.rb +0 -46
  124. data/spec/lib/immutable/list/group_by_spec.rb +0 -41
  125. data/spec/lib/immutable/list/hash_spec.rb +0 -21
  126. data/spec/lib/immutable/list/head_spec.rb +0 -19
  127. data/spec/lib/immutable/list/include_spec.rb +0 -35
  128. data/spec/lib/immutable/list/index_spec.rb +0 -33
  129. data/spec/lib/immutable/list/indices_spec.rb +0 -61
  130. data/spec/lib/immutable/list/init_spec.rb +0 -28
  131. data/spec/lib/immutable/list/inits_spec.rb +0 -28
  132. data/spec/lib/immutable/list/insert_spec.rb +0 -46
  133. data/spec/lib/immutable/list/inspect_spec.rb +0 -29
  134. data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
  135. data/spec/lib/immutable/list/join_spec.rb +0 -63
  136. data/spec/lib/immutable/list/last_spec.rb +0 -23
  137. data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
  138. data/spec/lib/immutable/list/map_spec.rb +0 -45
  139. data/spec/lib/immutable/list/maximum_spec.rb +0 -39
  140. data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
  141. data/spec/lib/immutable/list/merge_spec.rb +0 -59
  142. data/spec/lib/immutable/list/minimum_spec.rb +0 -39
  143. data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
  144. data/spec/lib/immutable/list/none_spec.rb +0 -47
  145. data/spec/lib/immutable/list/one_spec.rb +0 -49
  146. data/spec/lib/immutable/list/partition_spec.rb +0 -115
  147. data/spec/lib/immutable/list/permutation_spec.rb +0 -55
  148. data/spec/lib/immutable/list/pop_spec.rb +0 -25
  149. data/spec/lib/immutable/list/product_spec.rb +0 -23
  150. data/spec/lib/immutable/list/reduce_spec.rb +0 -53
  151. data/spec/lib/immutable/list/reject_spec.rb +0 -45
  152. data/spec/lib/immutable/list/reverse_spec.rb +0 -34
  153. data/spec/lib/immutable/list/rotate_spec.rb +0 -36
  154. data/spec/lib/immutable/list/sample_spec.rb +0 -13
  155. data/spec/lib/immutable/list/select_spec.rb +0 -70
  156. data/spec/lib/immutable/list/size_spec.rb +0 -25
  157. data/spec/lib/immutable/list/slice_spec.rb +0 -229
  158. data/spec/lib/immutable/list/sorting_spec.rb +0 -46
  159. data/spec/lib/immutable/list/span_spec.rb +0 -76
  160. data/spec/lib/immutable/list/split_at_spec.rb +0 -43
  161. data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
  162. data/spec/lib/immutable/list/sum_spec.rb +0 -23
  163. data/spec/lib/immutable/list/tail_spec.rb +0 -30
  164. data/spec/lib/immutable/list/tails_spec.rb +0 -28
  165. data/spec/lib/immutable/list/take_spec.rb +0 -30
  166. data/spec/lib/immutable/list/take_while_spec.rb +0 -46
  167. data/spec/lib/immutable/list/to_a_spec.rb +0 -39
  168. data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
  169. data/spec/lib/immutable/list/to_list_spec.rb +0 -19
  170. data/spec/lib/immutable/list/to_set_spec.rb +0 -17
  171. data/spec/lib/immutable/list/transpose_spec.rb +0 -19
  172. data/spec/lib/immutable/list/union_spec.rb +0 -31
  173. data/spec/lib/immutable/list/uniq_spec.rb +0 -35
  174. data/spec/lib/immutable/list/zip_spec.rb +0 -23
  175. data/spec/lib/immutable/nested/construction_spec.rb +0 -95
  176. data/spec/lib/immutable/set/add_spec.rb +0 -75
  177. data/spec/lib/immutable/set/all_spec.rb +0 -51
  178. data/spec/lib/immutable/set/any_spec.rb +0 -51
  179. data/spec/lib/immutable/set/clear_spec.rb +0 -33
  180. data/spec/lib/immutable/set/compact_spec.rb +0 -30
  181. data/spec/lib/immutable/set/construction_spec.rb +0 -18
  182. data/spec/lib/immutable/set/copying_spec.rb +0 -13
  183. data/spec/lib/immutable/set/count_spec.rb +0 -36
  184. data/spec/lib/immutable/set/delete_spec.rb +0 -71
  185. data/spec/lib/immutable/set/difference_spec.rb +0 -49
  186. data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
  187. data/spec/lib/immutable/set/each_spec.rb +0 -45
  188. data/spec/lib/immutable/set/empty_spec.rb +0 -44
  189. data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
  190. data/spec/lib/immutable/set/eql_spec.rb +0 -109
  191. data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
  192. data/spec/lib/immutable/set/find_spec.rb +0 -35
  193. data/spec/lib/immutable/set/first_spec.rb +0 -28
  194. data/spec/lib/immutable/set/flatten_spec.rb +0 -46
  195. data/spec/lib/immutable/set/grep_spec.rb +0 -57
  196. data/spec/lib/immutable/set/group_by_spec.rb +0 -59
  197. data/spec/lib/immutable/set/hash_spec.rb +0 -22
  198. data/spec/lib/immutable/set/include_spec.rb +0 -60
  199. data/spec/lib/immutable/set/inspect_spec.rb +0 -47
  200. data/spec/lib/immutable/set/intersect_spec.rb +0 -25
  201. data/spec/lib/immutable/set/intersection_spec.rb +0 -52
  202. data/spec/lib/immutable/set/join_spec.rb +0 -64
  203. data/spec/lib/immutable/set/map_spec.rb +0 -59
  204. data/spec/lib/immutable/set/marshal_spec.rb +0 -28
  205. data/spec/lib/immutable/set/maximum_spec.rb +0 -36
  206. data/spec/lib/immutable/set/minimum_spec.rb +0 -36
  207. data/spec/lib/immutable/set/new_spec.rb +0 -53
  208. data/spec/lib/immutable/set/none_spec.rb +0 -47
  209. data/spec/lib/immutable/set/one_spec.rb +0 -47
  210. data/spec/lib/immutable/set/partition_spec.rb +0 -52
  211. data/spec/lib/immutable/set/product_spec.rb +0 -23
  212. data/spec/lib/immutable/set/reduce_spec.rb +0 -55
  213. data/spec/lib/immutable/set/reject_spec.rb +0 -50
  214. data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
  215. data/spec/lib/immutable/set/sample_spec.rb +0 -13
  216. data/spec/lib/immutable/set/select_spec.rb +0 -73
  217. data/spec/lib/immutable/set/size_spec.rb +0 -17
  218. data/spec/lib/immutable/set/sorting_spec.rb +0 -59
  219. data/spec/lib/immutable/set/subset_spec.rb +0 -51
  220. data/spec/lib/immutable/set/sum_spec.rb +0 -23
  221. data/spec/lib/immutable/set/superset_spec.rb +0 -51
  222. data/spec/lib/immutable/set/to_a_spec.rb +0 -30
  223. data/spec/lib/immutable/set/to_list_spec.rb +0 -35
  224. data/spec/lib/immutable/set/to_set_spec.rb +0 -19
  225. data/spec/lib/immutable/set/union_spec.rb +0 -63
  226. data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
  227. data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
  228. data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
  229. data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
  230. data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
  231. data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
  232. data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
  233. data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
  234. data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
  235. data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
  236. data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
  237. data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
  238. data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
  239. data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
  240. data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
  241. data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
  242. data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
  243. data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
  244. data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
  245. data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
  246. data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
  247. data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
  248. data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
  249. data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
  250. data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
  251. data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
  252. data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
  253. data/spec/lib/immutable/sorted_set/map_spec.rb +0 -43
  254. data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
  255. data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
  256. data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
  257. data/spec/lib/immutable/sorted_set/new_spec.rb +0 -71
  258. data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
  259. data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
  260. data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
  261. data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
  262. data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
  263. data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -44
  264. data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
  265. data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
  266. data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
  267. data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
  268. data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
  269. data/spec/lib/immutable/sorted_set/union_spec.rb +0 -27
  270. data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
  271. data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
  272. data/spec/lib/immutable/vector/add_spec.rb +0 -67
  273. data/spec/lib/immutable/vector/any_spec.rb +0 -69
  274. data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
  275. data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
  276. data/spec/lib/immutable/vector/clear_spec.rb +0 -33
  277. data/spec/lib/immutable/vector/combination_spec.rb +0 -81
  278. data/spec/lib/immutable/vector/compact_spec.rb +0 -29
  279. data/spec/lib/immutable/vector/compare_spec.rb +0 -31
  280. data/spec/lib/immutable/vector/concat_spec.rb +0 -34
  281. data/spec/lib/immutable/vector/copying_spec.rb +0 -20
  282. data/spec/lib/immutable/vector/count_spec.rb +0 -17
  283. data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
  284. data/spec/lib/immutable/vector/delete_spec.rb +0 -30
  285. data/spec/lib/immutable/vector/drop_spec.rb +0 -41
  286. data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
  287. data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
  288. data/spec/lib/immutable/vector/each_spec.rb +0 -44
  289. data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
  290. data/spec/lib/immutable/vector/empty_spec.rb +0 -41
  291. data/spec/lib/immutable/vector/eql_spec.rb +0 -76
  292. data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
  293. data/spec/lib/immutable/vector/fill_spec.rb +0 -88
  294. data/spec/lib/immutable/vector/first_spec.rb +0 -18
  295. data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
  296. data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
  297. data/spec/lib/immutable/vector/get_spec.rb +0 -74
  298. data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
  299. data/spec/lib/immutable/vector/include_spec.rb +0 -30
  300. data/spec/lib/immutable/vector/insert_spec.rb +0 -68
  301. data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
  302. data/spec/lib/immutable/vector/join_spec.rb +0 -58
  303. data/spec/lib/immutable/vector/last_spec.rb +0 -45
  304. data/spec/lib/immutable/vector/length_spec.rb +0 -45
  305. data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
  306. data/spec/lib/immutable/vector/map_spec.rb +0 -51
  307. data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
  308. data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
  309. data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
  310. data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
  311. data/spec/lib/immutable/vector/new_spec.rb +0 -50
  312. data/spec/lib/immutable/vector/partition_spec.rb +0 -52
  313. data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
  314. data/spec/lib/immutable/vector/pop_spec.rb +0 -26
  315. data/spec/lib/immutable/vector/product_spec.rb +0 -70
  316. data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
  317. data/spec/lib/immutable/vector/reject_spec.rb +0 -43
  318. data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
  319. data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
  320. data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
  321. data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
  322. data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
  323. data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
  324. data/spec/lib/immutable/vector/sample_spec.rb +0 -13
  325. data/spec/lib/immutable/vector/select_spec.rb +0 -63
  326. data/spec/lib/immutable/vector/set_spec.rb +0 -174
  327. data/spec/lib/immutable/vector/shift_spec.rb +0 -27
  328. data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
  329. data/spec/lib/immutable/vector/slice_spec.rb +0 -240
  330. data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
  331. data/spec/lib/immutable/vector/sum_spec.rb +0 -17
  332. data/spec/lib/immutable/vector/take_spec.rb +0 -42
  333. data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
  334. data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
  335. data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
  336. data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
  337. data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
  338. data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
  339. data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
  340. data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
  341. data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
  342. data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
  343. data/spec/lib/immutable/vector/zip_spec.rb +0 -57
  344. data/spec/lib/load_spec.rb +0 -42
  345. data/spec/spec_helper.rb +0 -92
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#min" do
5
- context "with a block" do
6
- [
7
- [[], nil],
8
- [["A"], "A"],
9
- [%w[Ichi Ni San], "Ni"],
10
- ].each do |values, expected|
11
- describe "on #{values.inspect}" do
12
- it "returns #{expected.inspect}" do
13
- V[*values].min { |minimum, item| minimum.length <=> item.length }.should == expected
14
- end
15
- end
16
- end
17
- end
18
-
19
- context "without a block" do
20
- [
21
- [[], nil],
22
- [["A"], "A"],
23
- [%w[Ichi Ni San], "Ichi"],
24
- ].each do |values, expected|
25
- describe "on #{values.inspect}" do
26
- it "returns #{expected.inspect}" do
27
- V[*values].min.should == expected
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#*" do
5
- let(:vector) { V[1, 2, 3] }
6
-
7
- context "with a String argument" do
8
- it "acts just like #join" do
9
- (vector * 'boo').should eql(vector.join('boo'))
10
- end
11
- end
12
-
13
- context "with an Integer argument" do
14
- it "concatenates n copies of the array" do
15
- (vector * 0).should eql(V.empty)
16
- (vector * 1).should eql(vector)
17
- (vector * 2).should eql(V[1,2,3,1,2,3])
18
- (vector * 3).should eql(V[1,2,3,1,2,3,1,2,3])
19
- end
20
-
21
- it "raises an ArgumentError if integer is negative" do
22
- -> { vector * -1 }.should raise_error(ArgumentError)
23
- end
24
-
25
- it "works on large vectors" do
26
- array = (1..50).to_a
27
- (V.new(array) * 25).should eql(V.new(array * 25))
28
- end
29
- end
30
-
31
- context "with a subclass of Vector" do
32
- it "returns an instance of the subclass" do
33
- subclass = Class.new(Immutable::Vector)
34
- instance = subclass.new([1,2,3])
35
- (instance * 10).class.should be(subclass)
36
- end
37
- end
38
-
39
- it "raises a TypeError if passed nil" do
40
- -> { vector * nil }.should raise_error(TypeError)
41
- end
42
-
43
- it "raises an ArgumentError if passed no arguments" do
44
- -> { vector.* }.should raise_error(ArgumentError)
45
- end
46
- end
47
- end
@@ -1,50 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe ".new" do
5
- it "accepts a single enumerable argument and creates a new vector" do
6
- vector = Immutable::Vector.new([1,2,3])
7
- vector.size.should be(3)
8
- vector[0].should be(1)
9
- vector[1].should be(2)
10
- vector[2].should be(3)
11
- end
12
-
13
- it "makes a defensive copy of a non-frozen mutable Array passed in" do
14
- array = [1,2,3]
15
- vector = Immutable::Vector.new(array)
16
- array[0] = 'changed'
17
- vector[0].should be(1)
18
- end
19
-
20
- it "is amenable to overriding of #initialize" do
21
- class SnazzyVector < Immutable::Vector
22
- def initialize
23
- super(['SNAZZY!!!'])
24
- end
25
- end
26
-
27
- vector = SnazzyVector.new
28
- vector.size.should be(1)
29
- vector.should == ['SNAZZY!!!']
30
- end
31
-
32
- context "from a subclass" do
33
- it "returns a frozen instance of the subclass" do
34
- subclass = Class.new(Immutable::Vector)
35
- instance = subclass.new(["some", "values"])
36
- instance.class.should be subclass
37
- instance.frozen?.should be true
38
- end
39
- end
40
- end
41
-
42
- describe ".[]" do
43
- it "accepts a variable number of items and creates a new vector" do
44
- vector = Immutable::Vector['a', 'b']
45
- vector.size.should be(2)
46
- vector[0].should == 'a'
47
- vector[1].should == 'b'
48
- end
49
- end
50
- end
@@ -1,52 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#partition" do
5
- [
6
- [[], [], []],
7
- [[1], [1], []],
8
- [[1, 2], [1], [2]],
9
- [[1, 2, 3], [1, 3], [2]],
10
- [[1, 2, 3, 4], [1, 3], [2, 4]],
11
- [[2, 3, 4], [3], [2, 4]],
12
- [[3, 4], [3], [4]],
13
- [[4], [], [4]],
14
- ].each do |values, expected_matches, expected_remainder|
15
- describe "on #{values.inspect}" do
16
- let(:vector) { V[*values] }
17
-
18
- describe "with a block" do
19
- let(:result) { vector.partition(&:odd?) }
20
- let(:matches) { result.first }
21
- let(:remainder) { result.last }
22
-
23
- it "preserves the original" do
24
- result
25
- vector.should eql(V[*values])
26
- end
27
-
28
- it "returns a frozen array with two items" do
29
- result.class.should be(Array)
30
- result.should be_frozen
31
- result.size.should be(2)
32
- end
33
-
34
- it "correctly identifies the matches" do
35
- matches.should eql(V[*expected_matches])
36
- end
37
-
38
- it "correctly identifies the remainder" do
39
- remainder.should eql(V[*expected_remainder])
40
- end
41
- end
42
-
43
- describe "without a block" do
44
- it "returns an Enumerator" do
45
- vector.partition.class.should be(Enumerator)
46
- vector.partition.each(&:odd?).should eql([V.new(expected_matches), V.new(expected_remainder)])
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,91 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#permutation" do
5
- let(:vector) { V[1,2,3,4] }
6
-
7
- context "without a block or arguments" do
8
- it "returns an Enumerator of all permutations" do
9
- vector.permutation.class.should be(Enumerator)
10
- vector.permutation.to_a.should eql(vector.to_a.permutation.to_a)
11
- end
12
- end
13
-
14
- context "without a block, but with integral argument" do
15
- it "returns an Enumerator of all permutations of given length" do
16
- vector.permutation(2).class.should be(Enumerator)
17
- vector.permutation(2).to_a.should eql(vector.to_a.permutation(2).to_a)
18
- vector.permutation(3).class.should be(Enumerator)
19
- vector.permutation(3).to_a.should eql(vector.to_a.permutation(3).to_a)
20
- end
21
- end
22
-
23
- context "with a block" do
24
- it "returns self" do
25
- vector.permutation {}.should be(vector)
26
- end
27
-
28
- context "and no argument" do
29
- it "yields all permutations" do
30
- yielded = []
31
- vector.permutation { |obj| yielded << obj }
32
- yielded.sort.should eql([[1,2,3,4], [1,2,4,3], [1,3,2,4], [1,3,4,2],
33
- [1,4,2,3], [1,4,3,2], [2,1,3,4], [2,1,4,3], [2,3,1,4], [2,3,4,1],
34
- [2,4,1,3], [2,4,3,1], [3,1,2,4], [3,1,4,2], [3,2,1,4], [3,2,4,1],
35
- [3,4,1,2], [3,4,2,1], [4,1,2,3], [4,1,3,2], [4,2,1,3], [4,2,3,1],
36
- [4,3,1,2], [4,3,2,1]])
37
- end
38
- end
39
-
40
- context "and an integral argument" do
41
- it "yields all permutations of the given length" do
42
- yielded = []
43
- vector.permutation(2) { |obj| yielded << obj }
44
- yielded.sort.should eql([[1,2], [1,3], [1,4], [2,1], [2,3], [2,4], [3,1],
45
- [3,2], [3,4], [4,1], [4,2], [4,3]])
46
- end
47
- end
48
- end
49
-
50
- context "on an empty vector" do
51
- it "yields the empty permutation" do
52
- yielded = []
53
- V.empty.permutation { |obj| yielded << obj }
54
- yielded.should eql([[]])
55
- end
56
- end
57
-
58
- context "with an argument of zero" do
59
- it "yields the empty permutation" do
60
- yielded = []
61
- vector.permutation(0) { |obj| yielded << obj }
62
- yielded.should eql([[]])
63
- end
64
- end
65
-
66
- context "with a length greater than the size of the vector" do
67
- it "yields no permutations" do
68
- vector.permutation(5) { |obj| fail }
69
- end
70
- end
71
-
72
- it "handles duplicate elements correctly" do
73
- V[1,2,3,1].permutation(2).sort.should eql([[1,1], [1,1], [1,2], [1,2],
74
- [1,3], [1,3], [2,1],[2,1],[2,3], [3,1],[3,1],[3,2]])
75
- end
76
-
77
- it "leaves the original unmodified" do
78
- vector.permutation(2) {}
79
- vector.should eql(V[1,2,3,4])
80
- end
81
-
82
- it "behaves like Array#permutation" do
83
- 10.times do
84
- array = rand(8).times.map { rand(10000) }
85
- vector = V.new(array)
86
- perm_size = array.size == 0 ? 0 : rand(array.size)
87
- array.permutation(perm_size).to_a.should == vector.permutation(perm_size).to_a
88
- end
89
- end
90
- end
91
- end
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#pop" do
5
- [
6
- [[], []],
7
- [["A"], []],
8
- [%w[A B C], %w[A B]],
9
- [1..32, 1..31],
10
- [1..33, 1..32]
11
- ].each do |values, expected|
12
- context "on #{values.inspect}" do
13
- let(:vector) { V[*values] }
14
-
15
- it "preserves the original" do
16
- vector.pop
17
- vector.should eql(V[*values])
18
- end
19
-
20
- it "returns #{expected.inspect}" do
21
- vector.pop.should eql(V[*expected])
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,70 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#product" do
5
- context "when passed no arguments" do
6
- it "multiplies all items in vector" do
7
- [
8
- [[], 1],
9
- [[2], 2],
10
- [[1, 3, 5, 7, 11], 1155],
11
- ].each do |values, expected|
12
- V[*values].product.should == expected
13
- end
14
- end
15
- end
16
-
17
- context "when passed one or more vectors" do
18
- let(:vector) { V[1,2,3] }
19
-
20
- context "when passed a block" do
21
- it "yields an array for each combination of items from the vectors" do
22
- yielded = []
23
- vector.product(vector) { |obj| yielded << obj }
24
- yielded.should eql([[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3]])
25
-
26
- yielded = []
27
- vector.product(V[3,4,5], V[6,8]) { |obj| yielded << obj }
28
- yielded.should eql(
29
- [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
30
- [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8],
31
- [3, 3, 6], [3, 3, 8], [3, 4, 6], [3, 4, 8], [3, 5, 6], [3, 5, 8]])
32
- end
33
-
34
- it "returns self" do
35
- vector.product(V.empty) {}.should be(vector)
36
- vector.product(V[1,2], V[3]) {}.should be(vector)
37
- V.empty.product(vector) {}.should be(V.empty)
38
- end
39
- end
40
-
41
- context "when not passed a block" do
42
- it "returns the cartesian product in an array" do
43
- V[1,2].product(V[3,4,5], V[6,8]).should eql(
44
- [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
45
- [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
46
- end
47
- end
48
-
49
- context "when one of the arguments is empty" do
50
- it "returns an empty array" do
51
- vector.product(V.empty, V[4,5,6]).should eql([])
52
- end
53
- end
54
-
55
- context "when the receiver is empty" do
56
- it "returns an empty array" do
57
- V.empty.product(vector, V[4,5,6]).should eql([])
58
- end
59
- end
60
- end
61
-
62
- context "when passed one or more Arrays" do
63
- it "also calculates the cartesian product correctly" do
64
- V[1,2].product([3,4,5], [6,8]).should eql(
65
- [[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
66
- [2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
67
- end
68
- end
69
- end
70
- end
@@ -1,55 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- [:reduce, :inject].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], 10, 10],
8
- [[1], 10, 9],
9
- [[1, 2, 3], 10, 4],
10
- ].each do |values, initial, expected|
11
- describe "on #{values.inspect}" do
12
- let(:vector) { V[*values] }
13
-
14
- describe "with an initial value of #{initial}" do
15
- describe "and a block" do
16
- it "returns #{expected.inspect}" do
17
- vector.send(method, initial) { |memo, item| memo - item }.should == expected
18
- end
19
- end
20
- end
21
- end
22
- end
23
-
24
- [
25
- [[], nil],
26
- [[1], 1],
27
- [[1, 2, 3], -4],
28
- ].each do |values, expected|
29
- describe "on #{values.inspect}" do
30
- let(:vector) { V[*values] }
31
-
32
- describe "with no initial value" do
33
- describe "and a block" do
34
- it "returns #{expected.inspect}" do
35
- vector.send(method) { |memo, item| memo - item }.should == expected
36
- end
37
- end
38
- end
39
- end
40
- end
41
-
42
- describe "with no block and a symbol argument" do
43
- it "uses the symbol as the name of a method to reduce with" do
44
- V[1, 2, 3].send(method, :+).should == 6
45
- end
46
- end
47
-
48
- describe "with no block and a string argument" do
49
- it "uses the string as the name of a method to reduce with" do
50
- V[1, 2, 3].send(method, '+').should == 6
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- [:reject, :delete_if].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], []],
8
- [["A"], ["A"]],
9
- [%w[A B C], %w[A B C]],
10
- [%w[A b C], %w[A C]],
11
- [%w[a b c], []],
12
- ].each do |values, expected|
13
- describe "on #{values.inspect}" do
14
- let(:vector) { V[*values] }
15
-
16
- context "with a block" do
17
- it "returns #{expected.inspect}" do
18
- vector.send(method) { |item| item == item.downcase }.should eql(V[*expected])
19
- end
20
- end
21
-
22
- context "without a block" do
23
- it "returns an Enumerator" do
24
- vector.send(method).class.should be(Enumerator)
25
- vector.send(method).each { |item| item == item.downcase }.should eql(V[*expected])
26
- end
27
- end
28
- end
29
- end
30
-
31
- it "works with a variety of inputs" do
32
- [1, 2, 10, 31, 32, 33, 1023, 1024, 1025].each do |size|
33
- [0, 5, 32, 50, 500, 800, 1024].each do |threshold|
34
- vector = V.new(1..size)
35
- result = vector.send(method) { |item| item > threshold }
36
- result.size.should == [size, threshold].min
37
- result.should eql(V.new(1..[size, threshold].min))
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,77 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#repeated_combination" do
5
- let(:vector) { V[1,2,3,4] }
6
-
7
- context "with no block" do
8
- it "returns an Enumerator" do
9
- vector.repeated_combination(2).class.should be(Enumerator)
10
- end
11
- end
12
-
13
- context "with a block" do
14
- it "returns self" do
15
- vector.repeated_combination(2) {}.should be(vector)
16
- end
17
- end
18
-
19
- context "with a negative argument" do
20
- it "yields nothing and returns self" do
21
- result = []
22
- vector.repeated_combination(-1) { |obj| result << obj }.should be(vector)
23
- result.should eql([])
24
- end
25
- end
26
-
27
- context "with a zero argument" do
28
- it "yields an empty array" do
29
- result = []
30
- vector.repeated_combination(0) { |obj| result << obj }
31
- result.should eql([[]])
32
- end
33
- end
34
-
35
- context "with a argument of 1" do
36
- it "yields each item in the vector, as single-item vectors" do
37
- result = []
38
- vector.repeated_combination(1) { |obj| result << obj }
39
- result.should eql([[1],[2],[3],[4]])
40
- end
41
- end
42
-
43
- context "on an empty vector, with an argument greater than zero" do
44
- it "yields nothing" do
45
- result = []
46
- V.empty.repeated_combination(1) { |obj| result << obj }
47
- result.should eql([])
48
- end
49
- end
50
-
51
- context "with a positive argument, greater than 1" do
52
- it "yields all combinations of the given size (where a single element can appear more than once in a row)" do
53
- vector.repeated_combination(2).to_a.should == [[1,1], [1,2], [1,3], [1,4], [2,2], [2,3], [2,4], [3,3], [3,4], [4,4]]
54
- vector.repeated_combination(3).to_a.should == [[1,1,1], [1,1,2], [1,1,3], [1,1,4],
55
- [1,2,2], [1,2,3], [1,2,4], [1,3,3], [1,3,4], [1,4,4], [2,2,2], [2,2,3],
56
- [2,2,4], [2,3,3], [2,3,4], [2,4,4], [3,3,3], [3,3,4], [3,4,4], [4,4,4]]
57
- V[1,2,3].repeated_combination(3).to_a.should == [[1,1,1], [1,1,2],
58
- [1,1,3], [1,2,2], [1,2,3], [1,3,3], [2,2,2], [2,2,3], [2,3,3], [3,3,3]]
59
- end
60
- end
61
-
62
- it "leaves the original unmodified" do
63
- vector.repeated_combination(2) {}
64
- vector.should eql(V[1,2,3,4])
65
- end
66
-
67
- it "behaves like Array#repeated_combination" do
68
- 0.upto(5) do |comb_size|
69
- array = 10.times.map { rand(1000) }
70
- V.new(array).repeated_combination(comb_size).to_a.should == array.repeated_combination(comb_size).to_a
71
- end
72
-
73
- array = 18.times.map { rand(1000) }
74
- V.new(array).repeated_combination(2).to_a.should == array.repeated_combination(2).to_a
75
- end
76
- end
77
- end
@@ -1,93 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#repeated_permutation" do
5
- let(:vector) { V[1,2,3,4] }
6
-
7
- context "without a block" do
8
- context "and without argument" do
9
- it "returns an Enumerator of all repeated permutations" do
10
- vector.repeated_permutation.class.should be(Enumerator)
11
- vector.repeated_permutation.to_a.sort.should eql(vector.to_a.repeated_permutation(4).to_a.sort)
12
- end
13
- end
14
-
15
- context "with an integral argument" do
16
- it "returns an Enumerator of all repeated permutations of the given length" do
17
- vector.repeated_permutation(2).class.should be(Enumerator)
18
- vector.repeated_permutation(2).to_a.sort.should eql(vector.to_a.repeated_permutation(2).to_a.sort)
19
- vector.repeated_permutation(3).class.should be(Enumerator)
20
- vector.repeated_permutation(3).to_a.sort.should eql(vector.to_a.repeated_permutation(3).to_a.sort)
21
- end
22
- end
23
- end
24
-
25
- context "with a block" do
26
- it "returns self" do
27
- vector.repeated_permutation {}.should be(vector)
28
- end
29
-
30
- context "on an empty vector" do
31
- it "yields the empty permutation" do
32
- yielded = []
33
- V.empty.repeated_permutation { |obj| yielded << obj }
34
- yielded.should eql([[]])
35
- end
36
- end
37
-
38
- context "with an argument of zero" do
39
- it "yields the empty permutation" do
40
- yielded = []
41
- vector.repeated_permutation(0) { |obj| yielded << obj }
42
- yielded.should eql([[]])
43
- end
44
- end
45
-
46
- context "with no argument" do
47
- it "yields all repeated permutations" do
48
- yielded = []
49
- V[1,2,3].repeated_permutation { |obj| yielded << obj }
50
- yielded.sort.should eql([[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2],
51
- [1,2,3], [1,3,1], [1,3,2], [1,3,3], [2,1,1], [2,1,2], [2,1,3], [2,2,1],
52
- [2,2,2], [2,2,3], [2,3,1], [2,3,2], [2,3,3], [3,1,1], [3,1,2], [3,1,3],
53
- [3,2,1], [3,2,2], [3,2,3], [3,3,1], [3,3,2], [3,3,3]])
54
- end
55
- end
56
-
57
- context "with a positive integral argument" do
58
- it "yields all repeated permutations of the given length" do
59
- yielded = []
60
- vector.repeated_permutation(2) { |obj| yielded << obj }
61
- yielded.sort.should eql([[1,1], [1,2], [1,3], [1,4], [2,1], [2,2], [2,3], [2,4],
62
- [3,1], [3,2], [3,3], [3,4], [4,1], [4,2], [4,3], [4,4]])
63
- end
64
- end
65
- end
66
-
67
- it "handles duplicate elements correctly" do
68
- V[10,11,10].repeated_permutation(2).sort.should eql([[10, 10], [10, 10],
69
- [10, 10], [10, 10], [10, 11], [10, 11], [11, 10], [11, 10], [11, 11]])
70
- end
71
-
72
- it "allows permutations larger than the number of elements" do
73
- V[1,2].repeated_permutation(3).sort.should eql(
74
- [[1, 1, 1], [1, 1, 2], [1, 2, 1],
75
- [1, 2, 2], [2, 1, 1], [2, 1, 2],
76
- [2, 2, 1], [2, 2, 2]])
77
- end
78
-
79
- it "leaves the original unmodified" do
80
- vector.repeated_permutation(2) {}
81
- vector.should eql(V[1,2,3,4])
82
- end
83
-
84
- it "behaves like Array#repeated_permutation" do
85
- 10.times do
86
- array = rand(8).times.map { rand(10000) }
87
- vector = V.new(array)
88
- perm_size = array.size == 0 ? 0 : rand(array.size)
89
- array.repeated_permutation(perm_size).to_a.should == vector.repeated_permutation(perm_size).to_a
90
- end
91
- end
92
- end
93
- end
@@ -1,31 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#reverse_each" do
5
- [2, 31, 32, 33, 1000, 1024, 1025, 2000].each do |size|
6
- context "on a #{size}-item vector" do
7
- let(:vector) { V[1..size] }
8
-
9
- context "with a block (internal iteration)" do
10
- it "returns self" do
11
- vector.reverse_each {}.should be(vector)
12
- end
13
-
14
- it "yields all items in the opposite order as #each" do
15
- result = []
16
- vector.reverse_each { |item| result << item }
17
- result.should eql(vector.to_a.reverse)
18
- end
19
- end
20
-
21
- context "with no block" do
22
- it "returns an Enumerator" do
23
- result = vector.reverse_each
24
- result.class.should be(Enumerator)
25
- result.to_a.should eql(vector.to_a.reverse)
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end